//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension Pinpoint {
    // MARK: Enums

    public enum Action: String, CustomStringConvertible, Codable {
        case deepLink = "DEEP_LINK"
        case openApp = "OPEN_APP"
        case url = "URL"
        public var description: String { return self.rawValue }
    }

    public enum AttributeType: String, CustomStringConvertible, Codable {
        case after = "AFTER"
        case before = "BEFORE"
        case between = "BETWEEN"
        case contains = "CONTAINS"
        case exclusive = "EXCLUSIVE"
        case inclusive = "INCLUSIVE"
        case on = "ON"
        public var description: String { return self.rawValue }
    }

    public enum CampaignStatus: String, CustomStringConvertible, Codable {
        case completed = "COMPLETED"
        case deleted = "DELETED"
        case executing = "EXECUTING"
        case invalid = "INVALID"
        case paused = "PAUSED"
        case pendingNextRun = "PENDING_NEXT_RUN"
        case scheduled = "SCHEDULED"
        public var description: String { return self.rawValue }
    }

    public enum ChannelType: String, CustomStringConvertible, Codable {
        case adm = "ADM"
        case apns = "APNS"
        case apnsSandbox = "APNS_SANDBOX"
        case apnsVoip = "APNS_VOIP"
        case apnsVoipSandbox = "APNS_VOIP_SANDBOX"
        case baidu = "BAIDU"
        case custom = "CUSTOM"
        case email = "EMAIL"
        case gcm = "GCM"
        case push = "PUSH"
        case sms = "SMS"
        case voice = "VOICE"
        public var description: String { return self.rawValue }
    }

    public enum DeliveryStatus: String, CustomStringConvertible, Codable {
        case duplicate = "DUPLICATE"
        case optOut = "OPT_OUT"
        case permanentFailure = "PERMANENT_FAILURE"
        case successful = "SUCCESSFUL"
        case temporaryFailure = "TEMPORARY_FAILURE"
        case throttled = "THROTTLED"
        case unknownFailure = "UNKNOWN_FAILURE"
        public var description: String { return self.rawValue }
    }

    public enum DimensionType: String, CustomStringConvertible, Codable {
        case exclusive = "EXCLUSIVE"
        case inclusive = "INCLUSIVE"
        public var description: String { return self.rawValue }
    }

    public enum Duration: String, CustomStringConvertible, Codable {
        case day14 = "DAY_14"
        case day30 = "DAY_30"
        case day7 = "DAY_7"
        case hr24 = "HR_24"
        public var description: String { return self.rawValue }
    }

    public enum FilterType: String, CustomStringConvertible, Codable {
        case endpoint = "ENDPOINT"
        case system = "SYSTEM"
        public var description: String { return self.rawValue }
    }

    public enum Format: String, CustomStringConvertible, Codable {
        case csv = "CSV"
        case json = "JSON"
        public var description: String { return self.rawValue }
    }

    public enum Frequency: String, CustomStringConvertible, Codable {
        case daily = "DAILY"
        case event = "EVENT"
        case hourly = "HOURLY"
        case monthly = "MONTHLY"
        case once = "ONCE"
        case weekly = "WEEKLY"
        public var description: String { return self.rawValue }
    }

    public enum Include: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case any = "ANY"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum JobStatus: String, CustomStringConvertible, Codable {
        case completed = "COMPLETED"
        case completing = "COMPLETING"
        case created = "CREATED"
        case failed = "FAILED"
        case failing = "FAILING"
        case initializing = "INITIALIZING"
        case pendingJob = "PENDING_JOB"
        case preparingForInitialization = "PREPARING_FOR_INITIALIZATION"
        case processing = "PROCESSING"
        public var description: String { return self.rawValue }
    }

    public enum MessageType: String, CustomStringConvertible, Codable {
        case promotional = "PROMOTIONAL"
        case transactional = "TRANSACTIONAL"
        public var description: String { return self.rawValue }
    }

    public enum Mode: String, CustomStringConvertible, Codable {
        case delivery = "DELIVERY"
        case filter = "FILTER"
        public var description: String { return self.rawValue }
    }

    public enum `Operator`: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case any = "ANY"
        public var description: String { return self.rawValue }
    }

    public enum RecencyType: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case inactive = "INACTIVE"
        public var description: String { return self.rawValue }
    }

    public enum SegmentType: String, CustomStringConvertible, Codable {
        case dimensional = "DIMENSIONAL"
        case `import` = "IMPORT"
        public var description: String { return self.rawValue }
    }

    public enum SourceType: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case any = "ANY"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum State: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case cancelled = "CANCELLED"
        case closed = "CLOSED"
        case completed = "COMPLETED"
        case draft = "DRAFT"
        public var description: String { return self.rawValue }
    }

    public enum TemplateType: String, CustomStringConvertible, Codable {
        case email = "EMAIL"
        case push = "PUSH"
        case sms = "SMS"
        case voice = "VOICE"
        public var description: String { return self.rawValue }
    }

    public enum `Type`: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case any = "ANY"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Endpointtypeselement: String, CustomStringConvertible, Codable {
        case adm = "ADM"
        case apns = "APNS"
        case apnsSandbox = "APNS_SANDBOX"
        case apnsVoip = "APNS_VOIP"
        case apnsVoipSandbox = "APNS_VOIP_SANDBOX"
        case baidu = "BAIDU"
        case custom = "CUSTOM"
        case email = "EMAIL"
        case gcm = "GCM"
        case push = "PUSH"
        case sms = "SMS"
        case voice = "VOICE"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct ADMChannelRequest: AWSEncodableShape {
        /// The Client ID that you received from Amazon to send messages by using ADM.
        public let clientId: String
        /// The Client Secret that you received from Amazon to send messages by using ADM.
        public let clientSecret: String
        /// Specifies whether to enable the ADM channel for the application.
        public let enabled: Bool?

        public init(clientId: String, clientSecret: String, enabled: Bool? = nil) {
            self.clientId = clientId
            self.clientSecret = clientSecret
            self.enabled = enabled
        }

        private enum CodingKeys: String, CodingKey {
            case clientId = "ClientId"
            case clientSecret = "ClientSecret"
            case enabled = "Enabled"
        }
    }

    public struct ADMChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the ADM channel applies to.
        public let applicationId: String?
        /// The date and time when the ADM channel was enabled.
        public let creationDate: String?
        /// Specifies whether the ADM channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the ADM channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the ADM channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the ADM channel.
        public let lastModifiedBy: String?
        /// The date and time when the ADM channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the ADM channel, this value is ADM.
        public let platform: String
        /// The current version of the ADM channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct ADMMessage: AWSEncodableShape {
        /// The action to occur if the recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking features of the Android platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The body of the notification message.
        public let body: String?
        /// An arbitrary string that indicates that multiple messages are logically the same and that Amazon Device Messaging (ADM) can drop previously enqueued messages in favor of this message.
        public let consolidationKey: String?
        /// The JSON data payload to use for the push notification, if the notification is a silent push notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
        public let data: [String: String]?
        /// The amount of time, in seconds, that ADM should store the message if the recipient's device is offline. Amazon Pinpoint specifies this value in the expiresAfter parameter when it sends the notification message to ADM.
        public let expiresAfter: String?
        /// The icon image name of the asset saved in your app.
        public let iconReference: String?
        /// The URL of the large icon image to display in the content view of the push notification.
        public let imageIconUrl: String?
        /// The URL of an image to display in the push notification.
        public let imageUrl: String?
        /// The base64-encoded, MD5 checksum of the value specified by the Data property. ADM uses the MD5 value to verify the integrity of the data.
        public let md5: String?
        /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message.
        public let rawContent: String?
        /// Specifies whether the notification is a silent push notification, which is a push notification that doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating an app's configuration or supporting phone home functionality.
        public let silentPush: Bool?
        /// The URL of the small icon image to display in the status bar and the content view of the push notification.
        public let smallImageIconUrl: String?
        /// The sound to play when the recipient receives the push notification. You can use the default stream or specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside in /res/raw/.
        public let sound: String?
        /// The default message variables to use in the notification message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The title to display above the notification message on the recipient's device.
        public let title: String?
        /// The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, consolidationKey: String? = nil, data: [String: String]? = nil, expiresAfter: String? = nil, iconReference: String? = nil, imageIconUrl: String? = nil, imageUrl: String? = nil, md5: String? = nil, rawContent: String? = nil, silentPush: Bool? = nil, smallImageIconUrl: String? = nil, sound: String? = nil, substitutions: [String: [String]]? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.consolidationKey = consolidationKey
            self.data = data
            self.expiresAfter = expiresAfter
            self.iconReference = iconReference
            self.imageIconUrl = imageIconUrl
            self.imageUrl = imageUrl
            self.md5 = md5
            self.rawContent = rawContent
            self.silentPush = silentPush
            self.smallImageIconUrl = smallImageIconUrl
            self.sound = sound
            self.substitutions = substitutions
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case consolidationKey = "ConsolidationKey"
            case data = "Data"
            case expiresAfter = "ExpiresAfter"
            case iconReference = "IconReference"
            case imageIconUrl = "ImageIconUrl"
            case imageUrl = "ImageUrl"
            case md5 = "MD5"
            case rawContent = "RawContent"
            case silentPush = "SilentPush"
            case smallImageIconUrl = "SmallImageIconUrl"
            case sound = "Sound"
            case substitutions = "Substitutions"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct APNSChannelRequest: AWSEncodableShape {
        /// The bundle identifier that's assigned to your iOS app. This identifier is used for APNs tokens.
        public let bundleId: String?
        /// The APNs client certificate that you received from Apple, if you want Amazon Pinpoint to communicate with APNs by using an APNs certificate.
        public let certificate: String?
        /// The default authentication method that you want Amazon Pinpoint to use when authenticating with APNs, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether to enable the APNs channel for the application.
        public let enabled: Bool?
        /// The private key for the APNs client certificate that you want Amazon Pinpoint to use to communicate with APNs.
        public let privateKey: String?
        /// The identifier that's assigned to your Apple developer account team. This identifier is used for APNs tokens.
        public let teamId: String?
        /// The authentication key to use for APNs tokens.
        public let tokenKey: String?
        /// The key identifier that's assigned to your APNs signing key, if you want Amazon Pinpoint to communicate with APNs by using APNs tokens.
        public let tokenKeyId: String?

        public init(bundleId: String? = nil, certificate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, privateKey: String? = nil, teamId: String? = nil, tokenKey: String? = nil, tokenKeyId: String? = nil) {
            self.bundleId = bundleId
            self.certificate = certificate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.privateKey = privateKey
            self.teamId = teamId
            self.tokenKey = tokenKey
            self.tokenKeyId = tokenKeyId
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case certificate = "Certificate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case privateKey = "PrivateKey"
            case teamId = "TeamId"
            case tokenKey = "TokenKey"
            case tokenKeyId = "TokenKeyId"
        }
    }

    public struct APNSChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the APNs channel applies to.
        public let applicationId: String?
        /// The date and time when the APNs channel was enabled.
        public let creationDate: String?
        /// The default authentication method that Amazon Pinpoint uses to authenticate with APNs for this channel, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether the APNs channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// Specifies whether the APNs channel is configured to communicate with APNs by using APNs tokens. To provide an authentication key for APNs tokens, set the TokenKey property of the channel.
        public let hasTokenKey: Bool?
        /// (Deprecated) An identifier for the APNs channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the APNs channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the APNs channel.
        public let lastModifiedBy: String?
        /// The date and time when the APNs channel was last modified.
        public let lastModifiedDate: String?
        ///  The type of messaging or notification platform for the channel. For the APNs channel, this value is APNS.
        public let platform: String
        /// The current version of the APNs channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, hasTokenKey: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.hasTokenKey = hasTokenKey
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case hasTokenKey = "HasTokenKey"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct APNSMessage: AWSEncodableShape {
        /// The action to occur if the recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This setting uses the deep-linking features of the iOS platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The type of push notification to send. Valid values are: alert - For a standard notification that's displayed on recipients' devices and prompts a recipient to interact with the notification. background - For a silent notification that delivers content in the background and isn't displayed on recipients' devices. complication - For a notification that contains update information for an app’s complication timeline. fileprovider - For a notification that signals changes to a File Provider extension. mdm - For a notification that tells managed devices to contact the MDM server. voip - For a notification that provides information about an incoming VoIP call. Amazon Pinpoint specifies this value in the apns-push-type request header when it sends the notification message to APNs. If you don't specify a value for this property, Amazon Pinpoint sets the value to alert or background automatically, based on the value that you specify for the SilentPush or RawContent property of the message. For more information about the apns-push-type request header, see Sending Notification Requests to APNs on the Apple Developer website.
        public let aPNSPushType: String?
        /// The key that indicates whether and how to modify the badge of your app's icon when the recipient receives the push notification. If this key isn't included in the dictionary, the badge doesn't change. To remove the badge, set this value to 0.
        public let badge: Int?
        /// The body of the notification message.
        public let body: String?
        /// The key that indicates the notification type for the push notification. This key is a value that's defined by the identifier property of one of your app's registered categories.
        public let category: String?
        /// An arbitrary identifier that, if assigned to multiple messages, APNs uses to coalesce the messages into a single push notification instead of delivering each message individually. This value can't exceed 64 bytes. Amazon Pinpoint specifies this value in the apns-collapse-id request header when it sends the notification message to APNs.
        public let collapseId: String?
        /// The JSON payload to use for a silent push notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
        public let data: [String: String]?
        /// The URL of an image or video to display in the push notification.
        public let mediaUrl: String?
        /// The authentication method that you want Amazon Pinpoint to use when authenticating with APNs, CERTIFICATE or TOKEN.
        public let preferredAuthenticationMethod: String?
        /// para>5 - Low priority, the notification might be delayed, delivered as part of a group, or throttled./listitem> 10 - High priority, the notification is sent immediately. This is the default value. A high priority notification should trigger an alert, play a sound, or badge your app's icon on the recipient's device./para> Amazon Pinpoint specifies this value in the apns-priority request header when it sends the notification message to APNs. The equivalent values for Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), are normal, for 5, and high, for 10. If you specify an FCM value for this property, Amazon Pinpoint accepts and converts the value to the corresponding APNs value.
        public let priority: String?
        /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message. If you specify the raw content of an APNs push notification, the message payload has to include the content-available key. The value of the content-available key has to be an integer, and can only be 0 or 1. If you're sending a standard notification, set the value of content-available to 0. If you're sending a silent (background) notification, set the value of content-available to 1. Additionally, silent notification payloads can't include the alert, badge, or sound keys. For more information, see Generating a Remote Notification and Pushing Background Updates to Your App on the Apple Developer website.
        public let rawContent: String?
        /// Specifies whether the notification is a silent push notification. A silent (or background) push notification isn't displayed on recipients' devices. You can use silent push notifications to make small updates to your app, or to display messages in an in-app message center. Amazon Pinpoint uses this property to determine the correct value for the apns-push-type request header when it sends the notification message to APNs. If you specify a value of true for this property, Amazon Pinpoint sets the value for the apns-push-type header field to background. If you specify the raw content of an APNs push notification, the message payload has to include the content-available key. For silent (background) notifications, set the value of content-available to 1. Additionally, the message payload for a silent notification can't include the alert, badge, or sound keys. For more information, see Generating a Remote Notification and Pushing Background Updates to Your App on the Apple Developer website. Apple has indicated that they will throttle "excessive" background notifications based on current traffic volumes. To prevent your notifications being throttled, Apple recommends that you send no more than 3 silent push notifications to each recipient per hour.
        public let silentPush: Bool?
        /// The key for the sound to play when the recipient receives the push notification. The value for this key is the name of a sound file in your app's main bundle or the Library/Sounds folder in your app's data container. If the sound file can't be found or you specify default for the value, the system plays the default alert sound.
        public let sound: String?
        /// The default message variables to use in the notification message. You can override these default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The key that represents your app-specific identifier for grouping notifications. If you provide a Notification Content app extension, you can use this value to group your notifications together.
        public let threadId: String?
        /// The amount of time, in seconds, that APNs should store and attempt to deliver the push notification, if the service is unable to deliver the notification the first time. If this value is 0, APNs treats the notification as if it expires immediately and the service doesn't store or try to deliver the notification again. Amazon Pinpoint specifies this value in the apns-expiration request header when it sends the notification message to APNs.
        public let timeToLive: Int?
        /// The title to display above the notification message on the recipient's device.
        public let title: String?
        /// The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, aPNSPushType: String? = nil, badge: Int? = nil, body: String? = nil, category: String? = nil, collapseId: String? = nil, data: [String: String]? = nil, mediaUrl: String? = nil, preferredAuthenticationMethod: String? = nil, priority: String? = nil, rawContent: String? = nil, silentPush: Bool? = nil, sound: String? = nil, substitutions: [String: [String]]? = nil, threadId: String? = nil, timeToLive: Int? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.aPNSPushType = aPNSPushType
            self.badge = badge
            self.body = body
            self.category = category
            self.collapseId = collapseId
            self.data = data
            self.mediaUrl = mediaUrl
            self.preferredAuthenticationMethod = preferredAuthenticationMethod
            self.priority = priority
            self.rawContent = rawContent
            self.silentPush = silentPush
            self.sound = sound
            self.substitutions = substitutions
            self.threadId = threadId
            self.timeToLive = timeToLive
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case aPNSPushType = "APNSPushType"
            case badge = "Badge"
            case body = "Body"
            case category = "Category"
            case collapseId = "CollapseId"
            case data = "Data"
            case mediaUrl = "MediaUrl"
            case preferredAuthenticationMethod = "PreferredAuthenticationMethod"
            case priority = "Priority"
            case rawContent = "RawContent"
            case silentPush = "SilentPush"
            case sound = "Sound"
            case substitutions = "Substitutions"
            case threadId = "ThreadId"
            case timeToLive = "TimeToLive"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct APNSPushNotificationTemplate: AWSEncodableShape & AWSDecodableShape {
        /// The action to occur if a recipient taps a push notification that's based on the message template. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This setting uses the deep-linking features of the iOS platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The message body to use in push notifications that are based on the message template.
        public let body: String?
        /// The URL of an image or video to display in push notifications that are based on the message template.
        public let mediaUrl: String?
        /// The raw, JSON-formatted string to use as the payload for push notifications that are based on the message template. If specified, this value overrides all other content for the message template.
        public let rawContent: String?
        /// The key for the sound to play when the recipient receives a push notification that's based on the message template. The value for this key is the name of a sound file in your app's main bundle or the Library/Sounds folder in your app's data container. If the sound file can't be found or you specify default for the value, the system plays the default alert sound.
        public let sound: String?
        /// The title to use in push notifications that are based on the message template. This title appears above the notification message on a recipient's device.
        public let title: String?
        /// The URL to open in the recipient's default mobile browser, if a recipient taps a push notification that's based on the message template and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, mediaUrl: String? = nil, rawContent: String? = nil, sound: String? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.mediaUrl = mediaUrl
            self.rawContent = rawContent
            self.sound = sound
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case mediaUrl = "MediaUrl"
            case rawContent = "RawContent"
            case sound = "Sound"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct APNSSandboxChannelRequest: AWSEncodableShape {
        /// The bundle identifier that's assigned to your iOS app. This identifier is used for APNs tokens.
        public let bundleId: String?
        /// The APNs client certificate that you received from Apple, if you want Amazon Pinpoint to communicate with the APNs sandbox environment by using an APNs certificate.
        public let certificate: String?
        /// The default authentication method that you want Amazon Pinpoint to use when authenticating with the APNs sandbox environment, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether to enable the APNs sandbox channel for the application.
        public let enabled: Bool?
        /// The private key for the APNs client certificate that you want Amazon Pinpoint to use to communicate with the APNs sandbox environment.
        public let privateKey: String?
        /// The identifier that's assigned to your Apple developer account team. This identifier is used for APNs tokens.
        public let teamId: String?
        /// The authentication key to use for APNs tokens.
        public let tokenKey: String?
        /// The key identifier that's assigned to your APNs signing key, if you want Amazon Pinpoint to communicate with the APNs sandbox environment by using APNs tokens.
        public let tokenKeyId: String?

        public init(bundleId: String? = nil, certificate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, privateKey: String? = nil, teamId: String? = nil, tokenKey: String? = nil, tokenKeyId: String? = nil) {
            self.bundleId = bundleId
            self.certificate = certificate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.privateKey = privateKey
            self.teamId = teamId
            self.tokenKey = tokenKey
            self.tokenKeyId = tokenKeyId
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case certificate = "Certificate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case privateKey = "PrivateKey"
            case teamId = "TeamId"
            case tokenKey = "TokenKey"
            case tokenKeyId = "TokenKeyId"
        }
    }

    public struct APNSSandboxChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the APNs sandbox channel applies to.
        public let applicationId: String?
        /// The date and time when the APNs sandbox channel was enabled.
        public let creationDate: String?
        /// The default authentication method that Amazon Pinpoint uses to authenticate with the APNs sandbox environment for this channel, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether the APNs sandbox channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// Specifies whether the APNs sandbox channel is configured to communicate with APNs by using APNs tokens. To provide an authentication key for APNs tokens, set the TokenKey property of the channel.
        public let hasTokenKey: Bool?
        /// (Deprecated) An identifier for the APNs sandbox channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the APNs sandbox channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the APNs sandbox channel.
        public let lastModifiedBy: String?
        /// The date and time when the APNs sandbox channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the APNs sandbox channel, this value is APNS_SANDBOX.
        public let platform: String
        /// The current version of the APNs sandbox channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, hasTokenKey: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.hasTokenKey = hasTokenKey
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case hasTokenKey = "HasTokenKey"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct APNSVoipChannelRequest: AWSEncodableShape {
        /// The bundle identifier that's assigned to your iOS app. This identifier is used for APNs tokens.
        public let bundleId: String?
        /// The APNs client certificate that you received from Apple, if you want Amazon Pinpoint to communicate with APNs by using an APNs certificate.
        public let certificate: String?
        /// The default authentication method that you want Amazon Pinpoint to use when authenticating with APNs, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether to enable the APNs VoIP channel for the application.
        public let enabled: Bool?
        /// The private key for the APNs client certificate that you want Amazon Pinpoint to use to communicate with APNs.
        public let privateKey: String?
        /// The identifier that's assigned to your Apple developer account team. This identifier is used for APNs tokens.
        public let teamId: String?
        /// The authentication key to use for APNs tokens.
        public let tokenKey: String?
        /// The key identifier that's assigned to your APNs signing key, if you want Amazon Pinpoint to communicate with APNs by using APNs tokens.
        public let tokenKeyId: String?

        public init(bundleId: String? = nil, certificate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, privateKey: String? = nil, teamId: String? = nil, tokenKey: String? = nil, tokenKeyId: String? = nil) {
            self.bundleId = bundleId
            self.certificate = certificate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.privateKey = privateKey
            self.teamId = teamId
            self.tokenKey = tokenKey
            self.tokenKeyId = tokenKeyId
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case certificate = "Certificate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case privateKey = "PrivateKey"
            case teamId = "TeamId"
            case tokenKey = "TokenKey"
            case tokenKeyId = "TokenKeyId"
        }
    }

    public struct APNSVoipChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the APNs VoIP channel applies to.
        public let applicationId: String?
        /// The date and time when the APNs VoIP channel was enabled.
        public let creationDate: String?
        /// The default authentication method that Amazon Pinpoint uses to authenticate with APNs for this channel, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether the APNs VoIP channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// Specifies whether the APNs VoIP channel is configured to communicate with APNs by using APNs tokens. To provide an authentication key for APNs tokens, set the TokenKey property of the channel.
        public let hasTokenKey: Bool?
        /// (Deprecated) An identifier for the APNs VoIP channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the APNs VoIP channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the APNs VoIP channel.
        public let lastModifiedBy: String?
        /// The date and time when the APNs VoIP channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the APNs VoIP channel, this value is APNS_VOIP.
        public let platform: String
        /// The current version of the APNs VoIP channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, hasTokenKey: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.hasTokenKey = hasTokenKey
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case hasTokenKey = "HasTokenKey"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct APNSVoipSandboxChannelRequest: AWSEncodableShape {
        /// The bundle identifier that's assigned to your iOS app. This identifier is used for APNs tokens.
        public let bundleId: String?
        /// The APNs client certificate that you received from Apple, if you want Amazon Pinpoint to communicate with the APNs sandbox environment by using an APNs certificate.
        public let certificate: String?
        /// The default authentication method that you want Amazon Pinpoint to use when authenticating with the APNs sandbox environment for this channel, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether the APNs VoIP sandbox channel is enabled for the application.
        public let enabled: Bool?
        /// The private key for the APNs client certificate that you want Amazon Pinpoint to use to communicate with the APNs sandbox environment.
        public let privateKey: String?
        /// The identifier that's assigned to your Apple developer account team. This identifier is used for APNs tokens.
        public let teamId: String?
        /// The authentication key to use for APNs tokens.
        public let tokenKey: String?
        /// The key identifier that's assigned to your APNs signing key, if you want Amazon Pinpoint to communicate with the APNs sandbox environment by using APNs tokens.
        public let tokenKeyId: String?

        public init(bundleId: String? = nil, certificate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, privateKey: String? = nil, teamId: String? = nil, tokenKey: String? = nil, tokenKeyId: String? = nil) {
            self.bundleId = bundleId
            self.certificate = certificate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.privateKey = privateKey
            self.teamId = teamId
            self.tokenKey = tokenKey
            self.tokenKeyId = tokenKeyId
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case certificate = "Certificate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case privateKey = "PrivateKey"
            case teamId = "TeamId"
            case tokenKey = "TokenKey"
            case tokenKeyId = "TokenKeyId"
        }
    }

    public struct APNSVoipSandboxChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the APNs VoIP sandbox channel applies to.
        public let applicationId: String?
        /// The date and time when the APNs VoIP sandbox channel was enabled.
        public let creationDate: String?
        /// The default authentication method that Amazon Pinpoint uses to authenticate with the APNs sandbox environment for this channel, key or certificate.
        public let defaultAuthenticationMethod: String?
        /// Specifies whether the APNs VoIP sandbox channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// Specifies whether the APNs VoIP sandbox channel is configured to communicate with APNs by using APNs tokens. To provide an authentication key for APNs tokens, set the TokenKey property of the channel.
        public let hasTokenKey: Bool?
        /// (Deprecated) An identifier for the APNs VoIP sandbox channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the APNs VoIP sandbox channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the APNs VoIP sandbox channel.
        public let lastModifiedBy: String?
        /// The date and time when the APNs VoIP sandbox channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the APNs VoIP sandbox channel, this value is APNS_VOIP_SANDBOX.
        public let platform: String
        /// The current version of the APNs VoIP sandbox channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, defaultAuthenticationMethod: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, hasTokenKey: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.defaultAuthenticationMethod = defaultAuthenticationMethod
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.hasTokenKey = hasTokenKey
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case defaultAuthenticationMethod = "DefaultAuthenticationMethod"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case hasTokenKey = "HasTokenKey"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct ActivitiesResponse: AWSDecodableShape {
        /// An array of responses, one for each activity that was performed by the campaign.
        public let item: [ActivityResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [ActivityResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct Activity: AWSEncodableShape & AWSDecodableShape {
        /// The settings for a yes/no split activity. This type of activity sends participants down one of two paths in a journey, based on conditions that you specify.
        public let conditionalSplit: ConditionalSplitActivity?
        /// The settings for a custom message activity. This type of activity calls an AWS Lambda function or web hook that sends messages to participants.
        public let custom: CustomMessageActivity?
        /// The custom description of the activity.
        public let description: String?
        /// The settings for an email activity. This type of activity sends an email message to participants.
        public let email: EmailMessageActivity?
        /// The settings for a holdout activity. This type of activity stops a journey for a specified percentage of participants.
        public let holdout: HoldoutActivity?
        /// The settings for a multivariate split activity. This type of activity sends participants down one of as many as five paths (including a default Else path) in a journey, based on conditions that you specify.
        public let multiCondition: MultiConditionalSplitActivity?
        /// The settings for a push notification activity. This type of activity sends a push notification to participants.
        public let push: PushMessageActivity?
        /// The settings for a random split activity. This type of activity randomly sends specified percentages of participants down one of as many as five paths in a journey, based on conditions that you specify.
        public let randomSplit: RandomSplitActivity?
        /// The settings for an SMS activity. This type of activity sends a text message to participants.
        public let sms: SMSMessageActivity?
        /// The settings for a wait activity. This type of activity waits for a certain amount of time or until a specific date and time before moving participants to the next activity in a journey.
        public let wait: WaitActivity?

        public init(conditionalSplit: ConditionalSplitActivity? = nil, custom: CustomMessageActivity? = nil, description: String? = nil, email: EmailMessageActivity? = nil, holdout: HoldoutActivity? = nil, multiCondition: MultiConditionalSplitActivity? = nil, push: PushMessageActivity? = nil, randomSplit: RandomSplitActivity? = nil, sms: SMSMessageActivity? = nil, wait: WaitActivity? = nil) {
            self.conditionalSplit = conditionalSplit
            self.custom = custom
            self.description = description
            self.email = email
            self.holdout = holdout
            self.multiCondition = multiCondition
            self.push = push
            self.randomSplit = randomSplit
            self.sms = sms
            self.wait = wait
        }

        private enum CodingKeys: String, CodingKey {
            case conditionalSplit = "ConditionalSplit"
            case custom = "CUSTOM"
            case description = "Description"
            case email = "EMAIL"
            case holdout = "Holdout"
            case multiCondition = "MultiCondition"
            case push = "PUSH"
            case randomSplit = "RandomSplit"
            case sms = "SMS"
            case wait = "Wait"
        }
    }

    public struct ActivityResponse: AWSDecodableShape {
        /// The unique identifier for the application that the campaign applies to.
        public let applicationId: String
        /// The unique identifier for the campaign that the activity applies to.
        public let campaignId: String
        /// The actual time, in ISO 8601 format, when the activity was marked CANCELLED or COMPLETED.
        public let end: String?
        /// The unique identifier for the activity.
        public let id: String
        /// Specifies whether the activity succeeded. Possible values are SUCCESS and FAIL.
        public let result: String?
        /// The scheduled start time, in ISO 8601 format, for the activity.
        public let scheduledStart: String?
        /// The actual start time, in ISO 8601 format, of the activity.
        public let start: String?
        /// The current status of the activity. Possible values are: PENDING, INITIALIZING, RUNNING, PAUSED, CANCELLED, and COMPLETED.
        public let state: String?
        /// The total number of endpoints that the campaign successfully delivered messages to.
        public let successfulEndpointCount: Int?
        /// The total number of time zones that were completed.
        public let timezonesCompletedCount: Int?
        /// The total number of unique time zones that are in the segment for the campaign.
        public let timezonesTotalCount: Int?
        /// The total number of endpoints that the campaign attempted to deliver messages to.
        public let totalEndpointCount: Int?
        /// The unique identifier for the campaign treatment that the activity applies to. A treatment is a variation of a campaign that's used for A/B testing of a campaign.
        public let treatmentId: String?

        public init(applicationId: String, campaignId: String, end: String? = nil, id: String, result: String? = nil, scheduledStart: String? = nil, start: String? = nil, state: String? = nil, successfulEndpointCount: Int? = nil, timezonesCompletedCount: Int? = nil, timezonesTotalCount: Int? = nil, totalEndpointCount: Int? = nil, treatmentId: String? = nil) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.end = end
            self.id = id
            self.result = result
            self.scheduledStart = scheduledStart
            self.start = start
            self.state = state
            self.successfulEndpointCount = successfulEndpointCount
            self.timezonesCompletedCount = timezonesCompletedCount
            self.timezonesTotalCount = timezonesTotalCount
            self.totalEndpointCount = totalEndpointCount
            self.treatmentId = treatmentId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case campaignId = "CampaignId"
            case end = "End"
            case id = "Id"
            case result = "Result"
            case scheduledStart = "ScheduledStart"
            case start = "Start"
            case state = "State"
            case successfulEndpointCount = "SuccessfulEndpointCount"
            case timezonesCompletedCount = "TimezonesCompletedCount"
            case timezonesTotalCount = "TimezonesTotalCount"
            case totalEndpointCount = "TotalEndpointCount"
            case treatmentId = "TreatmentId"
        }
    }

    public struct AddressConfiguration: AWSEncodableShape {
        /// The message body to use instead of the default message body. This value overrides the default message body.
        public let bodyOverride: String?
        /// The channel to use when sending the message.
        public let channelType: ChannelType?
        /// An object that maps custom attributes to attributes for the address and is attached to the message. Attribute names are case sensitive. For a push notification, this payload is added to the data.pinpoint object. For an email or text message, this payload is added to email/SMS delivery receipt event attributes.
        public let context: [String: String]?
        /// The raw, JSON-formatted string to use as the payload for the message. If specified, this value overrides all other values for the message.
        public let rawContent: String?
        /// A map of the message variables to merge with the variables specified by properties of the DefaultMessage object. The variables specified in this map take precedence over all other variables.
        public let substitutions: [String: [String]]?
        /// The message title to use instead of the default message title. This value overrides the default message title.
        public let titleOverride: String?

        public init(bodyOverride: String? = nil, channelType: ChannelType? = nil, context: [String: String]? = nil, rawContent: String? = nil, substitutions: [String: [String]]? = nil, titleOverride: String? = nil) {
            self.bodyOverride = bodyOverride
            self.channelType = channelType
            self.context = context
            self.rawContent = rawContent
            self.substitutions = substitutions
            self.titleOverride = titleOverride
        }

        private enum CodingKeys: String, CodingKey {
            case bodyOverride = "BodyOverride"
            case channelType = "ChannelType"
            case context = "Context"
            case rawContent = "RawContent"
            case substitutions = "Substitutions"
            case titleOverride = "TitleOverride"
        }
    }

    public struct AndroidPushNotificationTemplate: AWSEncodableShape & AWSDecodableShape {
        /// The action to occur if a recipient taps a push notification that's based on the message template. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking features of the Android platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The message body to use in a push notification that's based on the message template.
        public let body: String?
        /// The URL of the large icon image to display in the content view of a push notification that's based on the message template.
        public let imageIconUrl: String?
        /// The URL of an image to display in a push notification that's based on the message template.
        public let imageUrl: String?
        /// The raw, JSON-formatted string to use as the payload for a push notification that's based on the message template. If specified, this value overrides all other content for the message template.
        public let rawContent: String?
        /// The URL of the small icon image to display in the status bar and the content view of a push notification that's based on the message template.
        public let smallImageIconUrl: String?
        /// The sound to play when a recipient receives a push notification that's based on the message template. You can use the default stream or specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside in /res/raw/.
        public let sound: String?
        /// The title to use in a push notification that's based on the message template. This title appears above the notification message on a recipient's device.
        public let title: String?
        /// The URL to open in a recipient's default mobile browser, if a recipient taps a push notification that's based on the message template and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, imageIconUrl: String? = nil, imageUrl: String? = nil, rawContent: String? = nil, smallImageIconUrl: String? = nil, sound: String? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.imageIconUrl = imageIconUrl
            self.imageUrl = imageUrl
            self.rawContent = rawContent
            self.smallImageIconUrl = smallImageIconUrl
            self.sound = sound
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case imageIconUrl = "ImageIconUrl"
            case imageUrl = "ImageUrl"
            case rawContent = "RawContent"
            case smallImageIconUrl = "SmallImageIconUrl"
            case sound = "Sound"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct ApplicationDateRangeKpiResponse: AWSDecodableShape {
        /// The unique identifier for the application that the metric applies to.
        public let applicationId: String
        /// The last date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var endTime: Date
        /// The name of the metric, also referred to as a key performance indicator (KPI), that the data was retrieved for. This value describes the associated metric and consists of two or more terms, which are comprised of lowercase alphanumeric characters, separated by a hyphen. For a list of possible values, see the Amazon Pinpoint Developer Guide.
        public let kpiName: String
        /// An array of objects that contains the results of the query. Each object contains the value for the metric and metadata about that value.
        public let kpiResult: BaseKpiResult
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null for the Application Metrics resource because the resource returns all results in a single page.
        public let nextToken: String?
        /// The first date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var startTime: Date

        public init(applicationId: String, endTime: Date, kpiName: String, kpiResult: BaseKpiResult, nextToken: String? = nil, startTime: Date) {
            self.applicationId = applicationId
            self.endTime = endTime
            self.kpiName = kpiName
            self.kpiResult = kpiResult
            self.nextToken = nextToken
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case endTime = "EndTime"
            case kpiName = "KpiName"
            case kpiResult = "KpiResult"
            case nextToken = "NextToken"
            case startTime = "StartTime"
        }
    }

    public struct ApplicationResponse: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the application.
        public let arn: String
        /// The unique identifier for the application. This identifier is displayed as the Project ID on the Amazon Pinpoint console.
        public let id: String
        /// The display name of the application. This name is displayed as the Project name on the Amazon Pinpoint console.
        public let name: String
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the application. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?

        public init(arn: String, id: String, name: String, tags: [String: String]? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
            case tags
        }
    }

    public struct ApplicationSettingsResource: AWSDecodableShape {
        /// The unique identifier for the application. This identifier is displayed as the Project ID on the Amazon Pinpoint console.
        public let applicationId: String
        /// The settings for the AWS Lambda function to invoke by default as a code hook for campaigns in the application. You can use this hook to customize segments that are used by campaigns in the application.
        public let campaignHook: CampaignHook?
        /// The date and time, in ISO 8601 format, when the application's settings were last modified.
        public let lastModifiedDate: String?
        /// The default sending limits for campaigns in the application.
        public let limits: CampaignLimits?
        /// The default quiet time for campaigns in the application. Quiet time is a specific time range when messages aren't sent to endpoints, if all the following conditions are met: The EndpointDemographic.Timezone property of the endpoint is set to a valid value. The current time in the endpoint's time zone is later than or equal to the time specified by the QuietTime.Start property for the application (or a campaign or journey that has custom quiet time settings). The current time in the endpoint's time zone is earlier than or equal to the time specified by the QuietTime.End property for the application (or a campaign or journey that has custom quiet time settings). If any of the preceding conditions isn't met, the endpoint will receive messages from a campaign or journey, even if quiet time is enabled.
        public let quietTime: QuietTime?

        public init(applicationId: String, campaignHook: CampaignHook? = nil, lastModifiedDate: String? = nil, limits: CampaignLimits? = nil, quietTime: QuietTime? = nil) {
            self.applicationId = applicationId
            self.campaignHook = campaignHook
            self.lastModifiedDate = lastModifiedDate
            self.limits = limits
            self.quietTime = quietTime
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case campaignHook = "CampaignHook"
            case lastModifiedDate = "LastModifiedDate"
            case limits = "Limits"
            case quietTime = "QuietTime"
        }
    }

    public struct ApplicationsResponse: AWSDecodableShape {
        /// An array of responses, one for each application that was returned.
        public let item: [ApplicationResponse]?
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [ApplicationResponse]? = nil, nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct AttributeDimension: AWSEncodableShape & AWSDecodableShape {
        /// INCLUSIVE - endpoints that have attributes matching the values are included in the segment.EXCLUSIVE - endpoints that have attributes matching the values are excluded in the segment.CONTAINS - endpoints that have attributes' substrings match the values are included in the segment.BEFORE - endpoints with attributes read as ISO_INSTANT datetimes before the value are included in the segment.AFTER - endpoints with attributes read as ISO_INSTANT datetimes after the value are included in the segment.ON - endpoints with attributes read as ISO_INSTANT dates on the value are included in the segment. Time is ignored in this comparison.BETWEEN - endpoints with attributes read as ISO_INSTANT datetimes between the values are included in the segment.
        public let attributeType: AttributeType?
        /// The criteria values to use for the segment dimension. Depending on the value of the AttributeType property, endpoints are included or excluded from the segment if their attribute values match the criteria values.
        public let values: [String]

        public init(attributeType: AttributeType? = nil, values: [String]) {
            self.attributeType = attributeType
            self.values = values
        }

        private enum CodingKeys: String, CodingKey {
            case attributeType = "AttributeType"
            case values = "Values"
        }
    }

    public struct AttributesResource: AWSDecodableShape {
        /// The unique identifier for the application.
        public let applicationId: String
        /// An array that specifies the names of the attributes that were removed from the endpoints.
        public let attributes: [String]?
        /// The type of attribute or attributes that were removed from the endpoints. Valid values are: endpoint-custom-attributes - Custom attributes that describe endpoints. endpoint-metric-attributes - Custom metrics that your app reports to Amazon Pinpoint for endpoints. endpoint-user-attributes - Custom attributes that describe users.
        public let attributeType: String

        public init(applicationId: String, attributes: [String]? = nil, attributeType: String) {
            self.applicationId = applicationId
            self.attributes = attributes
            self.attributeType = attributeType
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case attributes = "Attributes"
            case attributeType = "AttributeType"
        }
    }

    public struct BaiduChannelRequest: AWSEncodableShape {
        /// The API key that you received from the Baidu Cloud Push service to communicate with the service.
        public let apiKey: String
        /// Specifies whether to enable the Baidu channel for the application.
        public let enabled: Bool?
        /// The secret key that you received from the Baidu Cloud Push service to communicate with the service.
        public let secretKey: String

        public init(apiKey: String, enabled: Bool? = nil, secretKey: String) {
            self.apiKey = apiKey
            self.enabled = enabled
            self.secretKey = secretKey
        }

        private enum CodingKeys: String, CodingKey {
            case apiKey = "ApiKey"
            case enabled = "Enabled"
            case secretKey = "SecretKey"
        }
    }

    public struct BaiduChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the Baidu channel applies to.
        public let applicationId: String?
        /// The date and time when the Baidu channel was enabled.
        public let creationDate: String?
        /// The API key that you received from the Baidu Cloud Push service to communicate with the service.
        public let credential: String
        /// Specifies whether the Baidu channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the Baidu channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the Baidu channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the Baidu channel.
        public let lastModifiedBy: String?
        /// The date and time when the Baidu channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the Baidu channel, this value is BAIDU.
        public let platform: String
        /// The current version of the Baidu channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, credential: String, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.credential = credential
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case credential = "Credential"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct BaiduMessage: AWSEncodableShape {
        /// The action to occur if the recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking features of the Android platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The body of the notification message.
        public let body: String?
        /// The JSON data payload to use for the push notification, if the notification is a silent push notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
        public let data: [String: String]?
        /// The icon image name of the asset saved in your app.
        public let iconReference: String?
        /// The URL of the large icon image to display in the content view of the push notification.
        public let imageIconUrl: String?
        /// The URL of an image to display in the push notification.
        public let imageUrl: String?
        /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message.
        public let rawContent: String?
        /// Specifies whether the notification is a silent push notification, which is a push notification that doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating an app's configuration or supporting phone home functionality.
        public let silentPush: Bool?
        /// The URL of the small icon image to display in the status bar and the content view of the push notification.
        public let smallImageIconUrl: String?
        /// The sound to play when the recipient receives the push notification. You can use the default stream or specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside in /res/raw/.
        public let sound: String?
        /// The default message variables to use in the notification message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The amount of time, in seconds, that the Baidu Cloud Push service should store the message if the recipient's device is offline. The default value and maximum supported time is 604,800 seconds (7 days).
        public let timeToLive: Int?
        /// The title to display above the notification message on the recipient's device.
        public let title: String?
        /// The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, data: [String: String]? = nil, iconReference: String? = nil, imageIconUrl: String? = nil, imageUrl: String? = nil, rawContent: String? = nil, silentPush: Bool? = nil, smallImageIconUrl: String? = nil, sound: String? = nil, substitutions: [String: [String]]? = nil, timeToLive: Int? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.data = data
            self.iconReference = iconReference
            self.imageIconUrl = imageIconUrl
            self.imageUrl = imageUrl
            self.rawContent = rawContent
            self.silentPush = silentPush
            self.smallImageIconUrl = smallImageIconUrl
            self.sound = sound
            self.substitutions = substitutions
            self.timeToLive = timeToLive
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case data = "Data"
            case iconReference = "IconReference"
            case imageIconUrl = "ImageIconUrl"
            case imageUrl = "ImageUrl"
            case rawContent = "RawContent"
            case silentPush = "SilentPush"
            case smallImageIconUrl = "SmallImageIconUrl"
            case sound = "Sound"
            case substitutions = "Substitutions"
            case timeToLive = "TimeToLive"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct BaseKpiResult: AWSDecodableShape {
        /// An array of objects that provides the results of a query that retrieved the data for a standard metric that applies to an application, campaign, or journey.
        public let rows: [ResultRow]

        public init(rows: [ResultRow]) {
            self.rows = rows
        }

        private enum CodingKeys: String, CodingKey {
            case rows = "Rows"
        }
    }

    public struct CampaignCustomMessage: AWSEncodableShape & AWSDecodableShape {
        /// The raw, JSON-formatted string to use as the payload for the message. The maximum size is 5 KB.
        public let data: String?

        public init(data: String? = nil) {
            self.data = data
        }

        private enum CodingKeys: String, CodingKey {
            case data = "Data"
        }
    }

    public struct CampaignDateRangeKpiResponse: AWSDecodableShape {
        /// The unique identifier for the application that the metric applies to.
        public let applicationId: String
        /// The unique identifier for the campaign that the metric applies to.
        public let campaignId: String
        /// The last date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var endTime: Date
        /// The name of the metric, also referred to as a key performance indicator (KPI), that the data was retrieved for. This value describes the associated metric and consists of two or more terms, which are comprised of lowercase alphanumeric characters, separated by a hyphen. For a list of possible values, see the Amazon Pinpoint Developer Guide.
        public let kpiName: String
        /// An array of objects that contains the results of the query. Each object contains the value for the metric and metadata about that value.
        public let kpiResult: BaseKpiResult
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null for the Campaign Metrics resource because the resource returns all results in a single page.
        public let nextToken: String?
        /// The first date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var startTime: Date

        public init(applicationId: String, campaignId: String, endTime: Date, kpiName: String, kpiResult: BaseKpiResult, nextToken: String? = nil, startTime: Date) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.endTime = endTime
            self.kpiName = kpiName
            self.kpiResult = kpiResult
            self.nextToken = nextToken
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case campaignId = "CampaignId"
            case endTime = "EndTime"
            case kpiName = "KpiName"
            case kpiResult = "KpiResult"
            case nextToken = "NextToken"
            case startTime = "StartTime"
        }
    }

    public struct CampaignEmailMessage: AWSEncodableShape & AWSDecodableShape {
        /// The body of the email for recipients whose email clients don't render HTML content.
        public let body: String?
        /// The verified email address to send the email from. The default address is the FromAddress specified for the email channel for the application.
        public let fromAddress: String?
        /// The body of the email, in HTML format, for recipients whose email clients render HTML content.
        public let htmlBody: String?
        /// The subject line, or title, of the email.
        public let title: String?

        public init(body: String? = nil, fromAddress: String? = nil, htmlBody: String? = nil, title: String? = nil) {
            self.body = body
            self.fromAddress = fromAddress
            self.htmlBody = htmlBody
            self.title = title
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case fromAddress = "FromAddress"
            case htmlBody = "HtmlBody"
            case title = "Title"
        }
    }

    public struct CampaignEventFilter: AWSEncodableShape & AWSDecodableShape {
        /// The dimension settings of the event filter for the campaign.
        public let dimensions: EventDimensions
        /// The type of event that causes the campaign to be sent. Valid values are: SYSTEM, sends the campaign when a system event occurs; and, ENDPOINT, sends the campaign when an endpoint event (Events resource) occurs.
        public let filterType: FilterType

        public init(dimensions: EventDimensions, filterType: FilterType) {
            self.dimensions = dimensions
            self.filterType = filterType
        }

        private enum CodingKeys: String, CodingKey {
            case dimensions = "Dimensions"
            case filterType = "FilterType"
        }
    }

    public struct CampaignHook: AWSEncodableShape & AWSDecodableShape {
        /// The name or Amazon Resource Name (ARN) of the AWS Lambda function that Amazon Pinpoint invokes to customize a segment for a campaign.
        public let lambdaFunctionName: String?
        /// The mode that Amazon Pinpoint uses to invoke the AWS Lambda function. Possible values are: FILTER - Invoke the function to customize the segment that's used by a campaign. DELIVERY - (Deprecated) Previously, invoked the function to send a campaign through a custom channel. This functionality is not supported anymore. To send a campaign through a custom channel, use the CustomDeliveryConfiguration and CampaignCustomMessage objects of the campaign.
        public let mode: Mode?
        ///  The web URL that Amazon Pinpoint calls to invoke the AWS Lambda function over HTTPS.
        public let webUrl: String?

        public init(lambdaFunctionName: String? = nil, mode: Mode? = nil, webUrl: String? = nil) {
            self.lambdaFunctionName = lambdaFunctionName
            self.mode = mode
            self.webUrl = webUrl
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaFunctionName = "LambdaFunctionName"
            case mode = "Mode"
            case webUrl = "WebUrl"
        }
    }

    public struct CampaignLimits: AWSEncodableShape & AWSDecodableShape {
        /// The maximum number of messages that a campaign can send to a single endpoint during a 24-hour period. For an application, this value specifies the default limit for the number of messages that campaigns and journeys can send to a single endpoint during a 24-hour period. The maximum value is 100.
        public let daily: Int?
        /// The maximum amount of time, in seconds, that a campaign can attempt to deliver a message after the scheduled start time for the campaign. The minimum value is 60 seconds.
        public let maximumDuration: Int?
        /// The maximum number of messages that a campaign can send each second. For an application, this value specifies the default limit for the number of messages that campaigns can send each second. The minimum value is 50. The maximum value is 20,000.
        public let messagesPerSecond: Int?
        /// The maximum number of messages that a campaign can send to a single endpoint during the course of the campaign. If a campaign recurs, this setting applies to all runs of the campaign. The maximum value is 100.
        public let total: Int?

        public init(daily: Int? = nil, maximumDuration: Int? = nil, messagesPerSecond: Int? = nil, total: Int? = nil) {
            self.daily = daily
            self.maximumDuration = maximumDuration
            self.messagesPerSecond = messagesPerSecond
            self.total = total
        }

        private enum CodingKeys: String, CodingKey {
            case daily = "Daily"
            case maximumDuration = "MaximumDuration"
            case messagesPerSecond = "MessagesPerSecond"
            case total = "Total"
        }
    }

    public struct CampaignResponse: AWSDecodableShape {
        /// An array of responses, one for each treatment that you defined for the campaign, in addition to the default treatment.
        public let additionalTreatments: [TreatmentResource]?
        /// The unique identifier for the application that the campaign applies to.
        public let applicationId: String
        /// The Amazon Resource Name (ARN) of the campaign.
        public let arn: String
        /// The date, in ISO 8601 format, when the campaign was created.
        public let creationDate: String
        /// The delivery configuration settings for sending the campaign through a custom channel.
        public let customDeliveryConfiguration: CustomDeliveryConfiguration?
        /// The current status of the campaign's default treatment. This value exists only for campaigns that have more than one treatment.
        public let defaultState: CampaignState?
        /// The custom description of the campaign.
        public let description: String?
        /// The allocated percentage of users (segment members) who shouldn't receive messages from the campaign.
        public let holdoutPercent: Int?
        /// The settings for the AWS Lambda function to use as a code hook for the campaign. You can use this hook to customize the segment that's used by the campaign.
        public let hook: CampaignHook?
        /// The unique identifier for the campaign.
        public let id: String
        /// Specifies whether the campaign is paused. A paused campaign doesn't run unless you resume it by changing this value to false.
        public let isPaused: Bool?
        /// The date, in ISO 8601 format, when the campaign was last modified.
        public let lastModifiedDate: String
        /// The messaging limits for the campaign.
        public let limits: CampaignLimits?
        /// The message configuration settings for the campaign.
        public let messageConfiguration: MessageConfiguration?
        /// The name of the campaign.
        public let name: String?
        /// The schedule settings for the campaign.
        public let schedule: Schedule?
        /// The unique identifier for the segment that's associated with the campaign.
        public let segmentId: String
        /// The version number of the segment that's associated with the campaign.
        public let segmentVersion: Int
        /// The current status of the campaign.
        public let state: CampaignState?
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the campaign. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The message template that’s used for the campaign.
        public let templateConfiguration: TemplateConfiguration?
        /// The custom description of the default treatment for the campaign.
        public let treatmentDescription: String?
        /// The custom name of the default treatment for the campaign, if the campaign has multiple treatments. A treatment is a variation of a campaign that's used for A/B testing.
        public let treatmentName: String?
        /// The version number of the campaign.
        public let version: Int?

        public init(additionalTreatments: [TreatmentResource]? = nil, applicationId: String, arn: String, creationDate: String, customDeliveryConfiguration: CustomDeliveryConfiguration? = nil, defaultState: CampaignState? = nil, description: String? = nil, holdoutPercent: Int? = nil, hook: CampaignHook? = nil, id: String, isPaused: Bool? = nil, lastModifiedDate: String, limits: CampaignLimits? = nil, messageConfiguration: MessageConfiguration? = nil, name: String? = nil, schedule: Schedule? = nil, segmentId: String, segmentVersion: Int, state: CampaignState? = nil, tags: [String: String]? = nil, templateConfiguration: TemplateConfiguration? = nil, treatmentDescription: String? = nil, treatmentName: String? = nil, version: Int? = nil) {
            self.additionalTreatments = additionalTreatments
            self.applicationId = applicationId
            self.arn = arn
            self.creationDate = creationDate
            self.customDeliveryConfiguration = customDeliveryConfiguration
            self.defaultState = defaultState
            self.description = description
            self.holdoutPercent = holdoutPercent
            self.hook = hook
            self.id = id
            self.isPaused = isPaused
            self.lastModifiedDate = lastModifiedDate
            self.limits = limits
            self.messageConfiguration = messageConfiguration
            self.name = name
            self.schedule = schedule
            self.segmentId = segmentId
            self.segmentVersion = segmentVersion
            self.state = state
            self.tags = tags
            self.templateConfiguration = templateConfiguration
            self.treatmentDescription = treatmentDescription
            self.treatmentName = treatmentName
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case additionalTreatments = "AdditionalTreatments"
            case applicationId = "ApplicationId"
            case arn = "Arn"
            case creationDate = "CreationDate"
            case customDeliveryConfiguration = "CustomDeliveryConfiguration"
            case defaultState = "DefaultState"
            case description = "Description"
            case holdoutPercent = "HoldoutPercent"
            case hook = "Hook"
            case id = "Id"
            case isPaused = "IsPaused"
            case lastModifiedDate = "LastModifiedDate"
            case limits = "Limits"
            case messageConfiguration = "MessageConfiguration"
            case name = "Name"
            case schedule = "Schedule"
            case segmentId = "SegmentId"
            case segmentVersion = "SegmentVersion"
            case state = "State"
            case tags
            case templateConfiguration = "TemplateConfiguration"
            case treatmentDescription = "TreatmentDescription"
            case treatmentName = "TreatmentName"
            case version = "Version"
        }
    }

    public struct CampaignSmsMessage: AWSEncodableShape & AWSDecodableShape {
        /// The body of the SMS message.
        public let body: String?
        /// The entity ID or Principal Entity (PE) id received from the regulatory body for sending SMS in your country.
        public let entityId: String?
        /// The SMS message type. Valid values are TRANSACTIONAL (for messages that are critical or time-sensitive, such as a one-time passwords) and PROMOTIONAL (for messsages that aren't critical or time-sensitive, such as marketing messages).
        public let messageType: MessageType?
        /// The long code to send the SMS message from. This value should be one of the dedicated long codes that's assigned to your AWS account. Although it isn't required, we recommend that you specify the long code using an E.164 format to ensure prompt and accurate delivery of the message. For example, +12065550100.
        public let originationNumber: String?
        /// The sender ID to display on recipients' devices when they receive the SMS message.
        public let senderId: String?
        /// The template ID received from the regulatory body for sending SMS in your country.
        public let templateId: String?

        public init(body: String? = nil, entityId: String? = nil, messageType: MessageType? = nil, originationNumber: String? = nil, senderId: String? = nil, templateId: String? = nil) {
            self.body = body
            self.entityId = entityId
            self.messageType = messageType
            self.originationNumber = originationNumber
            self.senderId = senderId
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case entityId = "EntityId"
            case messageType = "MessageType"
            case originationNumber = "OriginationNumber"
            case senderId = "SenderId"
            case templateId = "TemplateId"
        }
    }

    public struct CampaignState: AWSDecodableShape {
        /// The current status of the campaign, or the current status of a treatment that belongs to an A/B test campaign. If a campaign uses A/B testing, the campaign has a status of COMPLETED only if all campaign treatments have a status of COMPLETED. If you delete the segment that's associated with a campaign, the campaign fails and has a status of DELETED.
        public let campaignStatus: CampaignStatus?

        public init(campaignStatus: CampaignStatus? = nil) {
            self.campaignStatus = campaignStatus
        }

        private enum CodingKeys: String, CodingKey {
            case campaignStatus = "CampaignStatus"
        }
    }

    public struct CampaignsResponse: AWSDecodableShape {
        /// An array of responses, one for each campaign that's associated with the application.
        public let item: [CampaignResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [CampaignResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct ChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application.
        public let applicationId: String?
        /// The date and time, in ISO 8601 format, when the channel was enabled.
        public let creationDate: String?
        /// Specifies whether the channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the channel.
        public let lastModifiedBy: String?
        /// The date and time, in ISO 8601 format, when the channel was last modified.
        public let lastModifiedDate: String?
        /// The current version of the channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case version = "Version"
        }
    }

    public struct ChannelsResponse: AWSDecodableShape {
        /// A map that contains a multipart response for each channel. For each item in this object, the ChannelType is the key and the Channel is the value.
        public let channels: [String: ChannelResponse]

        public init(channels: [String: ChannelResponse]) {
            self.channels = channels
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "Channels"
        }
    }

    public struct Condition: AWSEncodableShape & AWSDecodableShape {
        /// The conditions to evaluate for the activity.
        public let conditions: [SimpleCondition]?
        /// Specifies how to handle multiple conditions for the activity. For example, if you specify two conditions for an activity, whether both or only one of the conditions must be met for the activity to be performed.
        public let `operator`: Operator?

        public init(conditions: [SimpleCondition]? = nil, operator: Operator? = nil) {
            self.conditions = conditions
            self.`operator` = `operator`
        }

        private enum CodingKeys: String, CodingKey {
            case conditions = "Conditions"
            case `operator` = "Operator"
        }
    }

    public struct ConditionalSplitActivity: AWSEncodableShape & AWSDecodableShape {
        /// The conditions that define the paths for the activity, and the relationship between the conditions.
        public let condition: Condition?
        /// The amount of time to wait before determining whether the conditions are met, or the date and time when Amazon Pinpoint determines whether the conditions are met.
        public let evaluationWaitTime: WaitTime?
        /// The unique identifier for the activity to perform if the conditions aren't met.
        public let falseActivity: String?
        /// The unique identifier for the activity to perform if the conditions are met.
        public let trueActivity: String?

        public init(condition: Condition? = nil, evaluationWaitTime: WaitTime? = nil, falseActivity: String? = nil, trueActivity: String? = nil) {
            self.condition = condition
            self.evaluationWaitTime = evaluationWaitTime
            self.falseActivity = falseActivity
            self.trueActivity = trueActivity
        }

        private enum CodingKeys: String, CodingKey {
            case condition = "Condition"
            case evaluationWaitTime = "EvaluationWaitTime"
            case falseActivity = "FalseActivity"
            case trueActivity = "TrueActivity"
        }
    }

    public struct CreateAppRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createApplicationRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "createApplicationRequest", location: .body(locationName: "CreateApplicationRequest"))
        ]

        public let createApplicationRequest: CreateApplicationRequest

        public init(createApplicationRequest: CreateApplicationRequest) {
            self.createApplicationRequest = createApplicationRequest
        }

        private enum CodingKeys: String, CodingKey {
            case createApplicationRequest = "CreateApplicationRequest"
        }
    }

    public struct CreateAppResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationResponse", location: .body(locationName: "ApplicationResponse"))
        ]

        public let applicationResponse: ApplicationResponse

        public init(applicationResponse: ApplicationResponse) {
            self.applicationResponse = applicationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case applicationResponse = "ApplicationResponse"
        }
    }

    public struct CreateApplicationRequest: AWSEncodableShape {
        /// The display name of the application. This name is displayed as the Project name on the Amazon Pinpoint console.
        public let name: String
        /// A string-to-string map of key-value pairs that defines the tags to associate with the application. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?

        public init(name: String, tags: [String: String]? = nil) {
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case tags
        }
    }

    public struct CreateCampaignRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeCampaignRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "writeCampaignRequest", location: .body(locationName: "WriteCampaignRequest"))
        ]

        public let applicationId: String
        public let writeCampaignRequest: WriteCampaignRequest

        public init(applicationId: String, writeCampaignRequest: WriteCampaignRequest) {
            self.applicationId = applicationId
            self.writeCampaignRequest = writeCampaignRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeCampaignRequest = "WriteCampaignRequest"
        }
    }

    public struct CreateCampaignResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignResponse", location: .body(locationName: "CampaignResponse"))
        ]

        public let campaignResponse: CampaignResponse

        public init(campaignResponse: CampaignResponse) {
            self.campaignResponse = campaignResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignResponse = "CampaignResponse"
        }
    }

    public struct CreateEmailTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "emailTemplateRequest", location: .body(locationName: "EmailTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name"))
        ]

        public let emailTemplateRequest: EmailTemplateRequest
        public let templateName: String

        public init(emailTemplateRequest: EmailTemplateRequest, templateName: String) {
            self.emailTemplateRequest = emailTemplateRequest
            self.templateName = templateName
        }

        private enum CodingKeys: String, CodingKey {
            case emailTemplateRequest = "EmailTemplateRequest"
        }
    }

    public struct CreateEmailTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createTemplateMessageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "createTemplateMessageBody", location: .body(locationName: "CreateTemplateMessageBody"))
        ]

        public let createTemplateMessageBody: CreateTemplateMessageBody

        public init(createTemplateMessageBody: CreateTemplateMessageBody) {
            self.createTemplateMessageBody = createTemplateMessageBody
        }

        private enum CodingKeys: String, CodingKey {
            case createTemplateMessageBody = "CreateTemplateMessageBody"
        }
    }

    public struct CreateExportJobRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "exportJobRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "exportJobRequest", location: .body(locationName: "ExportJobRequest"))
        ]

        public let applicationId: String
        public let exportJobRequest: ExportJobRequest

        public init(applicationId: String, exportJobRequest: ExportJobRequest) {
            self.applicationId = applicationId
            self.exportJobRequest = exportJobRequest
        }

        private enum CodingKeys: String, CodingKey {
            case exportJobRequest = "ExportJobRequest"
        }
    }

    public struct CreateExportJobResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "exportJobResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "exportJobResponse", location: .body(locationName: "ExportJobResponse"))
        ]

        public let exportJobResponse: ExportJobResponse

        public init(exportJobResponse: ExportJobResponse) {
            self.exportJobResponse = exportJobResponse
        }

        private enum CodingKeys: String, CodingKey {
            case exportJobResponse = "ExportJobResponse"
        }
    }

    public struct CreateImportJobRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "importJobRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "importJobRequest", location: .body(locationName: "ImportJobRequest"))
        ]

        public let applicationId: String
        public let importJobRequest: ImportJobRequest

        public init(applicationId: String, importJobRequest: ImportJobRequest) {
            self.applicationId = applicationId
            self.importJobRequest = importJobRequest
        }

        private enum CodingKeys: String, CodingKey {
            case importJobRequest = "ImportJobRequest"
        }
    }

    public struct CreateImportJobResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "importJobResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "importJobResponse", location: .body(locationName: "ImportJobResponse"))
        ]

        public let importJobResponse: ImportJobResponse

        public init(importJobResponse: ImportJobResponse) {
            self.importJobResponse = importJobResponse
        }

        private enum CodingKeys: String, CodingKey {
            case importJobResponse = "ImportJobResponse"
        }
    }

    public struct CreateJourneyRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeJourneyRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "writeJourneyRequest", location: .body(locationName: "WriteJourneyRequest"))
        ]

        public let applicationId: String
        public let writeJourneyRequest: WriteJourneyRequest

        public init(applicationId: String, writeJourneyRequest: WriteJourneyRequest) {
            self.applicationId = applicationId
            self.writeJourneyRequest = writeJourneyRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeJourneyRequest = "WriteJourneyRequest"
        }
    }

    public struct CreateJourneyResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyResponse", location: .body(locationName: "JourneyResponse"))
        ]

        public let journeyResponse: JourneyResponse

        public init(journeyResponse: JourneyResponse) {
            self.journeyResponse = journeyResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyResponse = "JourneyResponse"
        }
    }

    public struct CreatePushTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "pushNotificationTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "pushNotificationTemplateRequest", location: .body(locationName: "PushNotificationTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name"))
        ]

        public let pushNotificationTemplateRequest: PushNotificationTemplateRequest
        public let templateName: String

        public init(pushNotificationTemplateRequest: PushNotificationTemplateRequest, templateName: String) {
            self.pushNotificationTemplateRequest = pushNotificationTemplateRequest
            self.templateName = templateName
        }

        private enum CodingKeys: String, CodingKey {
            case pushNotificationTemplateRequest = "PushNotificationTemplateRequest"
        }
    }

    public struct CreatePushTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createTemplateMessageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "createTemplateMessageBody", location: .body(locationName: "CreateTemplateMessageBody"))
        ]

        public let createTemplateMessageBody: CreateTemplateMessageBody

        public init(createTemplateMessageBody: CreateTemplateMessageBody) {
            self.createTemplateMessageBody = createTemplateMessageBody
        }

        private enum CodingKeys: String, CodingKey {
            case createTemplateMessageBody = "CreateTemplateMessageBody"
        }
    }

    public struct CreateRecommenderConfiguration: AWSEncodableShape {
        /// A map of key-value pairs that defines 1-10 custom endpoint or user attributes, depending on the value for the RecommendationProviderIdType property. Each of these attributes temporarily stores a recommended item that's retrieved from the recommender model and sent to an AWS Lambda function for additional processing. Each attribute can be used as a message variable in a message template. In the map, the key is the name of a custom attribute and the value is a custom display name for that attribute. The display name appears in the Attribute finder of the template editor on the Amazon Pinpoint console. The following restrictions apply to these names: An attribute name must start with a letter or number and it can contain up to 50 characters. The characters can be letters, numbers, underscores (_), or hyphens (-). Attribute names are case sensitive and must be unique. An attribute display name must start with a letter or number and it can contain up to 25 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-). This object is required if the configuration invokes an AWS Lambda function (RecommendationTransformerUri) to process recommendation data. Otherwise, don't include this object in your request.
        public let attributes: [String: String]?
        /// A custom description of the configuration for the recommender model. The description can contain up to 128 characters. The characters can be letters, numbers, spaces, or the following symbols: _ ; () , ‐.
        public let description: String?
        /// A custom name of the configuration for the recommender model. The name must start with a letter or number and it can contain up to 128 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-).
        public let name: String?
        /// The type of Amazon Pinpoint ID to associate with unique user IDs in the recommender model. This value enables the model to use attribute and event data that’s specific to a particular endpoint or user in an Amazon Pinpoint application. Valid values are: PINPOINT_ENDPOINT_ID - Associate each user in the model with a particular endpoint in Amazon Pinpoint. The data is correlated based on endpoint IDs in Amazon Pinpoint. This is the default value. PINPOINT_USER_ID - Associate each user in the model with a particular user and endpoint in Amazon Pinpoint. The data is correlated based on user IDs in Amazon Pinpoint. If you specify this value, an endpoint definition in Amazon Pinpoint has to specify both a user ID (UserId) and an endpoint ID. Otherwise, messages won’t be sent to the user's endpoint.
        public let recommendationProviderIdType: String?
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to retrieve recommendation data from the recommender model.
        public let recommendationProviderRoleArn: String
        /// The Amazon Resource Name (ARN) of the recommender model to retrieve recommendation data from. This value must match the ARN of an Amazon Personalize campaign.
        public let recommendationProviderUri: String
        /// A custom display name for the standard endpoint or user attribute (RecommendationItems) that temporarily stores recommended items for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This value is required if the configuration doesn't invoke an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data. This name appears in the Attribute finder of the template editor on the Amazon Pinpoint console. The name can contain up to 25 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-). These restrictions don't apply to attribute values.
        public let recommendationsDisplayName: String?
        /// The number of recommended items to retrieve from the model for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This number determines how many recommended items are available for use in message variables. The minimum value is 1. The maximum value is 5. The default value is 5. To use multiple recommended items and custom attributes with message variables, you have to use an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data.
        public let recommendationsPerMessage: Int?
        /// The name or Amazon Resource Name (ARN) of the AWS Lambda function to invoke for additional processing of recommendation data that's retrieved from the recommender model.
        public let recommendationTransformerUri: String?

        public init(attributes: [String: String]? = nil, description: String? = nil, name: String? = nil, recommendationProviderIdType: String? = nil, recommendationProviderRoleArn: String, recommendationProviderUri: String, recommendationsDisplayName: String? = nil, recommendationsPerMessage: Int? = nil, recommendationTransformerUri: String? = nil) {
            self.attributes = attributes
            self.description = description
            self.name = name
            self.recommendationProviderIdType = recommendationProviderIdType
            self.recommendationProviderRoleArn = recommendationProviderRoleArn
            self.recommendationProviderUri = recommendationProviderUri
            self.recommendationsDisplayName = recommendationsDisplayName
            self.recommendationsPerMessage = recommendationsPerMessage
            self.recommendationTransformerUri = recommendationTransformerUri
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
            case description = "Description"
            case name = "Name"
            case recommendationProviderIdType = "RecommendationProviderIdType"
            case recommendationProviderRoleArn = "RecommendationProviderRoleArn"
            case recommendationProviderUri = "RecommendationProviderUri"
            case recommendationsDisplayName = "RecommendationsDisplayName"
            case recommendationsPerMessage = "RecommendationsPerMessage"
            case recommendationTransformerUri = "RecommendationTransformerUri"
        }
    }

    public struct CreateRecommenderConfigurationRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createRecommenderConfiguration"
        public static var _encoding = [
            AWSMemberEncoding(label: "createRecommenderConfiguration", location: .body(locationName: "CreateRecommenderConfiguration"))
        ]

        public let createRecommenderConfiguration: CreateRecommenderConfiguration

        public init(createRecommenderConfiguration: CreateRecommenderConfiguration) {
            self.createRecommenderConfiguration = createRecommenderConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case createRecommenderConfiguration = "CreateRecommenderConfiguration"
        }
    }

    public struct CreateRecommenderConfigurationResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "recommenderConfigurationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderConfigurationResponse", location: .body(locationName: "RecommenderConfigurationResponse"))
        ]

        public let recommenderConfigurationResponse: RecommenderConfigurationResponse

        public init(recommenderConfigurationResponse: RecommenderConfigurationResponse) {
            self.recommenderConfigurationResponse = recommenderConfigurationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case recommenderConfigurationResponse = "RecommenderConfigurationResponse"
        }
    }

    public struct CreateSegmentRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeSegmentRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "writeSegmentRequest", location: .body(locationName: "WriteSegmentRequest"))
        ]

        public let applicationId: String
        public let writeSegmentRequest: WriteSegmentRequest

        public init(applicationId: String, writeSegmentRequest: WriteSegmentRequest) {
            self.applicationId = applicationId
            self.writeSegmentRequest = writeSegmentRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeSegmentRequest = "WriteSegmentRequest"
        }
    }

    public struct CreateSegmentResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentResponse", location: .body(locationName: "SegmentResponse"))
        ]

        public let segmentResponse: SegmentResponse

        public init(segmentResponse: SegmentResponse) {
            self.segmentResponse = segmentResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentResponse = "SegmentResponse"
        }
    }

    public struct CreateSmsTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "sMSTemplateRequest", location: .body(locationName: "SMSTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name"))
        ]

        public let sMSTemplateRequest: SMSTemplateRequest
        public let templateName: String

        public init(sMSTemplateRequest: SMSTemplateRequest, templateName: String) {
            self.sMSTemplateRequest = sMSTemplateRequest
            self.templateName = templateName
        }

        private enum CodingKeys: String, CodingKey {
            case sMSTemplateRequest = "SMSTemplateRequest"
        }
    }

    public struct CreateSmsTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createTemplateMessageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "createTemplateMessageBody", location: .body(locationName: "CreateTemplateMessageBody"))
        ]

        public let createTemplateMessageBody: CreateTemplateMessageBody

        public init(createTemplateMessageBody: CreateTemplateMessageBody) {
            self.createTemplateMessageBody = createTemplateMessageBody
        }

        private enum CodingKeys: String, CodingKey {
            case createTemplateMessageBody = "CreateTemplateMessageBody"
        }
    }

    public struct CreateTemplateMessageBody: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the message template that was created.
        public let arn: String?
        /// The message that's returned from the API for the request to create the message template.
        public let message: String?
        /// The unique identifier for the request to create the message template.
        public let requestID: String?

        public init(arn: String? = nil, message: String? = nil, requestID: String? = nil) {
            self.arn = arn
            self.message = message
            self.requestID = requestID
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case message = "Message"
            case requestID = "RequestID"
        }
    }

    public struct CreateVoiceTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "voiceTemplateRequest", location: .body(locationName: "VoiceTemplateRequest"))
        ]

        public let templateName: String
        public let voiceTemplateRequest: VoiceTemplateRequest

        public init(templateName: String, voiceTemplateRequest: VoiceTemplateRequest) {
            self.templateName = templateName
            self.voiceTemplateRequest = voiceTemplateRequest
        }

        private enum CodingKeys: String, CodingKey {
            case voiceTemplateRequest = "VoiceTemplateRequest"
        }
    }

    public struct CreateVoiceTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "createTemplateMessageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "createTemplateMessageBody", location: .body(locationName: "CreateTemplateMessageBody"))
        ]

        public let createTemplateMessageBody: CreateTemplateMessageBody

        public init(createTemplateMessageBody: CreateTemplateMessageBody) {
            self.createTemplateMessageBody = createTemplateMessageBody
        }

        private enum CodingKeys: String, CodingKey {
            case createTemplateMessageBody = "CreateTemplateMessageBody"
        }
    }

    public struct CustomDeliveryConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The destination to send the campaign or treatment to. This value can be one of the following: The name or Amazon Resource Name (ARN) of an AWS Lambda function to invoke to handle delivery of the campaign or treatment. The URL for a web application or service that supports HTTPS and can receive the message. The URL has to be a full URL, including the HTTPS protocol.
        public let deliveryUri: String
        /// The types of endpoints to send the campaign or treatment to. Each valid value maps to a type of channel that you can associate with an endpoint by using the ChannelType property of an endpoint.
        public let endpointTypes: [Endpointtypeselement]?

        public init(deliveryUri: String, endpointTypes: [Endpointtypeselement]? = nil) {
            self.deliveryUri = deliveryUri
            self.endpointTypes = endpointTypes
        }

        private enum CodingKeys: String, CodingKey {
            case deliveryUri = "DeliveryUri"
            case endpointTypes = "EndpointTypes"
        }
    }

    public struct CustomMessageActivity: AWSEncodableShape & AWSDecodableShape {
        /// The destination to send the campaign or treatment to. This value can be one of the following: The name or Amazon Resource Name (ARN) of an AWS Lambda function to invoke to handle delivery of the campaign or treatment. The URL for a web application or service that supports HTTPS and can receive the message. The URL has to be a full URL, including the HTTPS protocol.
        public let deliveryUri: String?
        /// The types of endpoints to send the custom message to. Each valid value maps to a type of channel that you can associate with an endpoint by using the ChannelType property of an endpoint.
        public let endpointTypes: [Endpointtypeselement]?
        /// Specifies the message data included in a custom channel message that's sent to participants in a journey.
        public let messageConfig: JourneyCustomMessage?
        /// The unique identifier for the next activity to perform, after Amazon Pinpoint calls the AWS Lambda function or web hook.
        public let nextActivity: String?
        /// The name of the custom message template to use for the message. If specified, this value must match the name of an existing message template.
        public let templateName: String?
        /// The unique identifier for the version of the message template to use for the message. If specified, this value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource. If you don't specify a value for this property, Amazon Pinpoint uses the active version of the template. The active version is typically the version of a template that's been most recently reviewed and approved for use, depending on your workflow. It isn't necessarily the latest version of a template.
        public let templateVersion: String?

        public init(deliveryUri: String? = nil, endpointTypes: [Endpointtypeselement]? = nil, messageConfig: JourneyCustomMessage? = nil, nextActivity: String? = nil, templateName: String? = nil, templateVersion: String? = nil) {
            self.deliveryUri = deliveryUri
            self.endpointTypes = endpointTypes
            self.messageConfig = messageConfig
            self.nextActivity = nextActivity
            self.templateName = templateName
            self.templateVersion = templateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case deliveryUri = "DeliveryUri"
            case endpointTypes = "EndpointTypes"
            case messageConfig = "MessageConfig"
            case nextActivity = "NextActivity"
            case templateName = "TemplateName"
            case templateVersion = "TemplateVersion"
        }
    }

    public struct DefaultMessage: AWSEncodableShape {
        /// The default body of the message.
        public let body: String?
        /// The default message variables to use in the message. You can override these default variables with individual address variables.
        public let substitutions: [String: [String]]?

        public init(body: String? = nil, substitutions: [String: [String]]? = nil) {
            self.body = body
            self.substitutions = substitutions
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case substitutions = "Substitutions"
        }
    }

    public struct DefaultPushNotificationMessage: AWSEncodableShape {
        /// The default action to occur if a recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This setting uses the deep-linking features of the iOS and Android platforms. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The default body of the notification message.
        public let body: String?
        /// The JSON data payload to use for the default push notification, if the notification is a silent push notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
        public let data: [String: String]?
        /// Specifies whether the default notification is a silent push notification, which is a push notification that doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating an app's configuration or delivering messages to an in-app notification center.
        public let silentPush: Bool?
        /// The default message variables to use in the notification message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The default title to display above the notification message on a recipient's device.
        public let title: String?
        /// The default URL to open in a recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, data: [String: String]? = nil, silentPush: Bool? = nil, substitutions: [String: [String]]? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.data = data
            self.silentPush = silentPush
            self.substitutions = substitutions
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case data = "Data"
            case silentPush = "SilentPush"
            case substitutions = "Substitutions"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct DefaultPushNotificationTemplate: AWSEncodableShape & AWSDecodableShape {
        /// The action to occur if a recipient taps a push notification that's based on the message template. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This setting uses the deep-linking features of the iOS and Android platforms. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The message body to use in push notifications that are based on the message template.
        public let body: String?
        /// The sound to play when a recipient receives a push notification that's based on the message template. You can use the default stream or specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside in /res/raw/. For an iOS platform, this value is the key for the name of a sound file in your app's main bundle or the Library/Sounds folder in your app's data container. If the sound file can't be found or you specify default for the value, the system plays the default alert sound.
        public let sound: String?
        /// The title to use in push notifications that are based on the message template. This title appears above the notification message on a recipient's device.
        public let title: String?
        /// The URL to open in a recipient's default mobile browser, if a recipient taps a push notification that's based on the message template and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, sound: String? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.sound = sound
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case sound = "Sound"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct DeleteAdmChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAdmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aDMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aDMChannelResponse", location: .body(locationName: "ADMChannelResponse"))
        ]

        public let aDMChannelResponse: ADMChannelResponse

        public init(aDMChannelResponse: ADMChannelResponse) {
            self.aDMChannelResponse = aDMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aDMChannelResponse = "ADMChannelResponse"
        }
    }

    public struct DeleteApnsChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApnsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSChannelResponse", location: .body(locationName: "APNSChannelResponse"))
        ]

        public let aPNSChannelResponse: APNSChannelResponse

        public init(aPNSChannelResponse: APNSChannelResponse) {
            self.aPNSChannelResponse = aPNSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSChannelResponse = "APNSChannelResponse"
        }
    }

    public struct DeleteApnsSandboxChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApnsSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSSandboxChannelResponse", location: .body(locationName: "APNSSandboxChannelResponse"))
        ]

        public let aPNSSandboxChannelResponse: APNSSandboxChannelResponse

        public init(aPNSSandboxChannelResponse: APNSSandboxChannelResponse) {
            self.aPNSSandboxChannelResponse = aPNSSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSSandboxChannelResponse = "APNSSandboxChannelResponse"
        }
    }

    public struct DeleteApnsVoipChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApnsVoipChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipChannelResponse", location: .body(locationName: "APNSVoipChannelResponse"))
        ]

        public let aPNSVoipChannelResponse: APNSVoipChannelResponse

        public init(aPNSVoipChannelResponse: APNSVoipChannelResponse) {
            self.aPNSVoipChannelResponse = aPNSVoipChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipChannelResponse = "APNSVoipChannelResponse"
        }
    }

    public struct DeleteApnsVoipSandboxChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApnsVoipSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipSandboxChannelResponse", location: .body(locationName: "APNSVoipSandboxChannelResponse"))
        ]

        public let aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse

        public init(aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse) {
            self.aPNSVoipSandboxChannelResponse = aPNSVoipSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipSandboxChannelResponse = "APNSVoipSandboxChannelResponse"
        }
    }

    public struct DeleteAppRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationResponse", location: .body(locationName: "ApplicationResponse"))
        ]

        public let applicationResponse: ApplicationResponse

        public init(applicationResponse: ApplicationResponse) {
            self.applicationResponse = applicationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case applicationResponse = "ApplicationResponse"
        }
    }

    public struct DeleteBaiduChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteBaiduChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "baiduChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "baiduChannelResponse", location: .body(locationName: "BaiduChannelResponse"))
        ]

        public let baiduChannelResponse: BaiduChannelResponse

        public init(baiduChannelResponse: BaiduChannelResponse) {
            self.baiduChannelResponse = baiduChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case baiduChannelResponse = "BaiduChannelResponse"
        }
    }

    public struct DeleteCampaignRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id"))
        ]

        public let applicationId: String
        public let campaignId: String

        public init(applicationId: String, campaignId: String) {
            self.applicationId = applicationId
            self.campaignId = campaignId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteCampaignResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignResponse", location: .body(locationName: "CampaignResponse"))
        ]

        public let campaignResponse: CampaignResponse

        public init(campaignResponse: CampaignResponse) {
            self.campaignResponse = campaignResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignResponse = "CampaignResponse"
        }
    }

    public struct DeleteEmailChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEmailChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "emailChannelResponse", location: .body(locationName: "EmailChannelResponse"))
        ]

        public let emailChannelResponse: EmailChannelResponse

        public init(emailChannelResponse: EmailChannelResponse) {
            self.emailChannelResponse = emailChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case emailChannelResponse = "EmailChannelResponse"
        }
    }

    public struct DeleteEmailTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEmailTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct DeleteEndpointRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "endpointId", location: .uri(locationName: "endpoint-id"))
        ]

        public let applicationId: String
        public let endpointId: String

        public init(applicationId: String, endpointId: String) {
            self.applicationId = applicationId
            self.endpointId = endpointId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEndpointResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "endpointResponse", location: .body(locationName: "EndpointResponse"))
        ]

        public let endpointResponse: EndpointResponse

        public init(endpointResponse: EndpointResponse) {
            self.endpointResponse = endpointResponse
        }

        private enum CodingKeys: String, CodingKey {
            case endpointResponse = "EndpointResponse"
        }
    }

    public struct DeleteEventStreamRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEventStreamResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "eventStream"
        public static var _encoding = [
            AWSMemberEncoding(label: "eventStream", location: .body(locationName: "EventStream"))
        ]

        public let eventStream: EventStream

        public init(eventStream: EventStream) {
            self.eventStream = eventStream
        }

        private enum CodingKeys: String, CodingKey {
            case eventStream = "EventStream"
        }
    }

    public struct DeleteGcmChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteGcmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "gCMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "gCMChannelResponse", location: .body(locationName: "GCMChannelResponse"))
        ]

        public let gCMChannelResponse: GCMChannelResponse

        public init(gCMChannelResponse: GCMChannelResponse) {
            self.gCMChannelResponse = gCMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case gCMChannelResponse = "GCMChannelResponse"
        }
    }

    public struct DeleteJourneyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id"))
        ]

        public let applicationId: String
        public let journeyId: String

        public init(applicationId: String, journeyId: String) {
            self.applicationId = applicationId
            self.journeyId = journeyId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteJourneyResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyResponse", location: .body(locationName: "JourneyResponse"))
        ]

        public let journeyResponse: JourneyResponse

        public init(journeyResponse: JourneyResponse) {
            self.journeyResponse = journeyResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyResponse = "JourneyResponse"
        }
    }

    public struct DeletePushTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeletePushTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct DeleteRecommenderConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderId", location: .uri(locationName: "recommender-id"))
        ]

        public let recommenderId: String

        public init(recommenderId: String) {
            self.recommenderId = recommenderId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRecommenderConfigurationResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "recommenderConfigurationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderConfigurationResponse", location: .body(locationName: "RecommenderConfigurationResponse"))
        ]

        public let recommenderConfigurationResponse: RecommenderConfigurationResponse

        public init(recommenderConfigurationResponse: RecommenderConfigurationResponse) {
            self.recommenderConfigurationResponse = recommenderConfigurationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case recommenderConfigurationResponse = "RecommenderConfigurationResponse"
        }
    }

    public struct DeleteSegmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id"))
        ]

        public let applicationId: String
        public let segmentId: String

        public init(applicationId: String, segmentId: String) {
            self.applicationId = applicationId
            self.segmentId = segmentId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSegmentResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentResponse", location: .body(locationName: "SegmentResponse"))
        ]

        public let segmentResponse: SegmentResponse

        public init(segmentResponse: SegmentResponse) {
            self.segmentResponse = segmentResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentResponse = "SegmentResponse"
        }
    }

    public struct DeleteSmsChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSmsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "sMSChannelResponse", location: .body(locationName: "SMSChannelResponse"))
        ]

        public let sMSChannelResponse: SMSChannelResponse

        public init(sMSChannelResponse: SMSChannelResponse) {
            self.sMSChannelResponse = sMSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case sMSChannelResponse = "SMSChannelResponse"
        }
    }

    public struct DeleteSmsTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSmsTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct DeleteUserEndpointsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "user-id"))
        ]

        public let applicationId: String
        public let userId: String

        public init(applicationId: String, userId: String) {
            self.applicationId = applicationId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteUserEndpointsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "endpointsResponse", location: .body(locationName: "EndpointsResponse"))
        ]

        public let endpointsResponse: EndpointsResponse

        public init(endpointsResponse: EndpointsResponse) {
            self.endpointsResponse = endpointsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case endpointsResponse = "EndpointsResponse"
        }
    }

    public struct DeleteVoiceChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceChannelResponse", location: .body(locationName: "VoiceChannelResponse"))
        ]

        public let voiceChannelResponse: VoiceChannelResponse

        public init(voiceChannelResponse: VoiceChannelResponse) {
            self.voiceChannelResponse = voiceChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case voiceChannelResponse = "VoiceChannelResponse"
        }
    }

    public struct DeleteVoiceTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct DirectMessageConfiguration: AWSEncodableShape {
        /// The default push notification message for the ADM (Amazon Device Messaging) channel. This message overrides the default push notification message (DefaultPushNotificationMessage).
        public let aDMMessage: ADMMessage?
        /// The default push notification message for the APNs (Apple Push Notification service) channel. This message overrides the default push notification message (DefaultPushNotificationMessage).
        public let aPNSMessage: APNSMessage?
        /// The default push notification message for the Baidu (Baidu Cloud Push) channel. This message overrides the default push notification message (DefaultPushNotificationMessage).
        public let baiduMessage: BaiduMessage?
        /// The default message for all channels.
        public let defaultMessage: DefaultMessage?
        /// The default push notification message for all push notification channels.
        public let defaultPushNotificationMessage: DefaultPushNotificationMessage?
        /// The default message for the email channel. This message overrides the default message (DefaultMessage).
        public let emailMessage: EmailMessage?
        /// The default push notification message for the GCM channel, which is used to send notifications through the Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), service. This message overrides the default push notification message (DefaultPushNotificationMessage).
        public let gCMMessage: GCMMessage?
        /// The default message for the SMS channel. This message overrides the default message (DefaultMessage).
        public let sMSMessage: SMSMessage?
        /// The default message for the voice channel. This message overrides the default message (DefaultMessage).
        public let voiceMessage: VoiceMessage?

        public init(aDMMessage: ADMMessage? = nil, aPNSMessage: APNSMessage? = nil, baiduMessage: BaiduMessage? = nil, defaultMessage: DefaultMessage? = nil, defaultPushNotificationMessage: DefaultPushNotificationMessage? = nil, emailMessage: EmailMessage? = nil, gCMMessage: GCMMessage? = nil, sMSMessage: SMSMessage? = nil, voiceMessage: VoiceMessage? = nil) {
            self.aDMMessage = aDMMessage
            self.aPNSMessage = aPNSMessage
            self.baiduMessage = baiduMessage
            self.defaultMessage = defaultMessage
            self.defaultPushNotificationMessage = defaultPushNotificationMessage
            self.emailMessage = emailMessage
            self.gCMMessage = gCMMessage
            self.sMSMessage = sMSMessage
            self.voiceMessage = voiceMessage
        }

        private enum CodingKeys: String, CodingKey {
            case aDMMessage = "ADMMessage"
            case aPNSMessage = "APNSMessage"
            case baiduMessage = "BaiduMessage"
            case defaultMessage = "DefaultMessage"
            case defaultPushNotificationMessage = "DefaultPushNotificationMessage"
            case emailMessage = "EmailMessage"
            case gCMMessage = "GCMMessage"
            case sMSMessage = "SMSMessage"
            case voiceMessage = "VoiceMessage"
        }
    }

    public struct EmailChannelRequest: AWSEncodableShape {
        /// The Amazon SES configuration set that you want to apply to messages that you send through the channel.
        public let configurationSet: String?
        /// Specifies whether to enable the email channel for the application.
        public let enabled: Bool?
        ///  The verified email address that you want to send email from when you send email through the channel.
        public let fromAddress: String
        ///  The Amazon Resource Name (ARN) of the identity, verified with Amazon Simple Email Service (Amazon SES), that you want to use when you send email through the channel.
        public let identity: String
        ///  The ARN of the AWS Identity and Access Management (IAM) role that you want Amazon Pinpoint to use when it submits email-related event data for the channel.
        public let roleArn: String?

        public init(configurationSet: String? = nil, enabled: Bool? = nil, fromAddress: String, identity: String, roleArn: String? = nil) {
            self.configurationSet = configurationSet
            self.enabled = enabled
            self.fromAddress = fromAddress
            self.identity = identity
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case configurationSet = "ConfigurationSet"
            case enabled = "Enabled"
            case fromAddress = "FromAddress"
            case identity = "Identity"
            case roleArn = "RoleArn"
        }
    }

    public struct EmailChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the email channel applies to.
        public let applicationId: String?
        /// The Amazon SES configuration set that's applied to messages that are sent through the channel.
        public let configurationSet: String?
        /// The date and time, in ISO 8601 format, when the email channel was enabled.
        public let creationDate: String?
        /// Specifies whether the email channel is enabled for the application.
        public let enabled: Bool?
        /// The verified email address that email is sent from when you send email through the channel.
        public let fromAddress: String?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the email channel. This property is retained only for backward compatibility.
        public let id: String?
        ///  The Amazon Resource Name (ARN) of the identity, verified with Amazon Simple Email Service (Amazon SES), that's used when you send email through the channel.
        public let identity: String?
        /// Specifies whether the email channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the email channel.
        public let lastModifiedBy: String?
        /// The date and time, in ISO 8601 format, when the email channel was last modified.
        public let lastModifiedDate: String?
        /// The maximum number of emails that can be sent through the channel each second.
        public let messagesPerSecond: Int?
        /// The type of messaging or notification platform for the channel. For the email channel, this value is EMAIL.
        public let platform: String
        ///  The ARN of the AWS Identity and Access Management (IAM) role that Amazon Pinpoint uses to submit email-related event data for the channel.
        public let roleArn: String?
        /// The current version of the email channel.
        public let version: Int?

        public init(applicationId: String? = nil, configurationSet: String? = nil, creationDate: String? = nil, enabled: Bool? = nil, fromAddress: String? = nil, hasCredential: Bool? = nil, id: String? = nil, identity: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, messagesPerSecond: Int? = nil, platform: String, roleArn: String? = nil, version: Int? = nil) {
            self.applicationId = applicationId
            self.configurationSet = configurationSet
            self.creationDate = creationDate
            self.enabled = enabled
            self.fromAddress = fromAddress
            self.hasCredential = hasCredential
            self.id = id
            self.identity = identity
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.messagesPerSecond = messagesPerSecond
            self.platform = platform
            self.roleArn = roleArn
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case configurationSet = "ConfigurationSet"
            case creationDate = "CreationDate"
            case enabled = "Enabled"
            case fromAddress = "FromAddress"
            case hasCredential = "HasCredential"
            case id = "Id"
            case identity = "Identity"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case messagesPerSecond = "MessagesPerSecond"
            case platform = "Platform"
            case roleArn = "RoleArn"
            case version = "Version"
        }
    }

    public struct EmailMessage: AWSEncodableShape {
        /// The body of the email message.
        public let body: String?
        /// The email address to forward bounces and complaints to, if feedback forwarding is enabled.
        public let feedbackForwardingAddress: String?
        /// The verified email address to send the email message from. The default value is the FromAddress specified for the email channel.
        public let fromAddress: String?
        /// The email message, represented as a raw MIME message.
        public let rawEmail: RawEmail?
        /// The reply-to email address(es) for the email message. If a recipient replies to the email, each reply-to address receives the reply.
        public let replyToAddresses: [String]?
        /// The email message, composed of a subject, a text part, and an HTML part.
        public let simpleEmail: SimpleEmail?
        /// The default message variables to use in the email message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?

        public init(body: String? = nil, feedbackForwardingAddress: String? = nil, fromAddress: String? = nil, rawEmail: RawEmail? = nil, replyToAddresses: [String]? = nil, simpleEmail: SimpleEmail? = nil, substitutions: [String: [String]]? = nil) {
            self.body = body
            self.feedbackForwardingAddress = feedbackForwardingAddress
            self.fromAddress = fromAddress
            self.rawEmail = rawEmail
            self.replyToAddresses = replyToAddresses
            self.simpleEmail = simpleEmail
            self.substitutions = substitutions
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case feedbackForwardingAddress = "FeedbackForwardingAddress"
            case fromAddress = "FromAddress"
            case rawEmail = "RawEmail"
            case replyToAddresses = "ReplyToAddresses"
            case simpleEmail = "SimpleEmail"
            case substitutions = "Substitutions"
        }
    }

    public struct EmailMessageActivity: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the sender address for an email message that's sent to participants in the journey.
        public let messageConfig: JourneyEmailMessage?
        /// The unique identifier for the next activity to perform, after the message is sent.
        public let nextActivity: String?
        /// The name of the email message template to use for the message. If specified, this value must match the name of an existing message template.
        public let templateName: String?
        /// The unique identifier for the version of the email template to use for the message. If specified, this value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource. If you don't specify a value for this property, Amazon Pinpoint uses the active version of the template. The active version is typically the version of a template that's been most recently reviewed and approved for use, depending on your workflow. It isn't necessarily the latest version of a template.
        public let templateVersion: String?

        public init(messageConfig: JourneyEmailMessage? = nil, nextActivity: String? = nil, templateName: String? = nil, templateVersion: String? = nil) {
            self.messageConfig = messageConfig
            self.nextActivity = nextActivity
            self.templateName = templateName
            self.templateVersion = templateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case messageConfig = "MessageConfig"
            case nextActivity = "NextActivity"
            case templateName = "TemplateName"
            case templateVersion = "TemplateVersion"
        }
    }

    public struct EmailTemplateRequest: AWSEncodableShape {
        /// A JSON object that specifies the default values to use for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable. When you create a message that's based on the template, you can override these defaults with message-specific and address-specific variables and values.
        public let defaultSubstitutions: String?
        /// The message body, in HTML format, to use in email messages that are based on the message template. We recommend using HTML format for email clients that render HTML content. You can include links, formatted text, and more in an HTML message.
        public let htmlPart: String?
        /// The unique identifier for the recommender model to use for the message template. Amazon Pinpoint uses this value to determine how to retrieve and process data from a recommender model when it sends messages that use the template, if the template contains message variables for recommendation data.
        public let recommenderId: String?
        /// The subject line, or title, to use in email messages that are based on the message template.
        public let subject: String?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// A custom description of the message template.
        public let templateDescription: String?
        /// The message body, in plain text format, to use in email messages that are based on the message template. We recommend using plain text format for email clients that don't render HTML content and clients that are connected to high-latency networks, such as mobile devices.
        public let textPart: String?

        public init(defaultSubstitutions: String? = nil, htmlPart: String? = nil, recommenderId: String? = nil, subject: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil, textPart: String? = nil) {
            self.defaultSubstitutions = defaultSubstitutions
            self.htmlPart = htmlPart
            self.recommenderId = recommenderId
            self.subject = subject
            self.tags = tags
            self.templateDescription = templateDescription
            self.textPart = textPart
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSubstitutions = "DefaultSubstitutions"
            case htmlPart = "HtmlPart"
            case recommenderId = "RecommenderId"
            case subject = "Subject"
            case tags
            case templateDescription = "TemplateDescription"
            case textPart = "TextPart"
        }
    }

    public struct EmailTemplateResponse: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the message template.
        public let arn: String?
        /// The date, in ISO 8601 format, when the message template was created.
        public let creationDate: String
        /// The JSON object that specifies the default values that are used for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable.
        public let defaultSubstitutions: String?
        /// The message body, in HTML format, that's used in email messages that are based on the message template.
        public let htmlPart: String?
        /// The date, in ISO 8601 format, when the message template was last modified.
        public let lastModifiedDate: String
        /// The unique identifier for the recommender model that's used by the message template.
        public let recommenderId: String?
        /// The subject line, or title, that's used in email messages that are based on the message template.
        public let subject: String?
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The custom description of the message template.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. For an email template, this value is EMAIL.
        public let templateType: TemplateType
        /// The message body, in plain text format, that's used in email messages that are based on the message template.
        public let textPart: String?
        /// The unique identifier, as an integer, for the active version of the message template, or the version of the template that you specified by using the version parameter in your request.
        public let version: String?

        public init(arn: String? = nil, creationDate: String, defaultSubstitutions: String? = nil, htmlPart: String? = nil, lastModifiedDate: String, recommenderId: String? = nil, subject: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil, templateName: String, templateType: TemplateType, textPart: String? = nil, version: String? = nil) {
            self.arn = arn
            self.creationDate = creationDate
            self.defaultSubstitutions = defaultSubstitutions
            self.htmlPart = htmlPart
            self.lastModifiedDate = lastModifiedDate
            self.recommenderId = recommenderId
            self.subject = subject
            self.tags = tags
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.textPart = textPart
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case creationDate = "CreationDate"
            case defaultSubstitutions = "DefaultSubstitutions"
            case htmlPart = "HtmlPart"
            case lastModifiedDate = "LastModifiedDate"
            case recommenderId = "RecommenderId"
            case subject = "Subject"
            case tags
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case textPart = "TextPart"
            case version = "Version"
        }
    }

    public struct EndpointBatchItem: AWSEncodableShape {
        /// The destination address for messages or push notifications that you send to the endpoint. The address varies by channel. For a push-notification channel, use the token provided by the push notification service, such as an Apple Push Notification service (APNs) device token or a Firebase Cloud Messaging (FCM) registration token. For the SMS channel, use a phone number in E.164 format, such as +12065550100. For the email channel, use an email address.
        public let address: String?
        /// One or more custom attributes that describe the endpoint by associating a name with an array of values. For example, the value of a custom attribute named Interests might be: ["Science", "Music", "Travel"]. You can use these attributes as filter criteria when you create segments. Attribute names are case sensitive. An attribute name can contain up to 50 characters. An attribute value can contain up to 100 characters. When you define the name of a custom attribute, avoid using the following characters: number sign (#), colon (:), question mark (?), backslash (\), and slash (/). The Amazon Pinpoint console can't display attribute names that contain these characters. This restriction doesn't apply to attribute values.
        public let attributes: [String: [String]]?
        /// The channel to use when sending messages or push notifications to the endpoint.
        public let channelType: ChannelType?
        /// The demographic information for the endpoint, such as the time zone and platform.
        public let demographic: EndpointDemographic?
        /// The date and time, in ISO 8601 format, when the endpoint was created or updated.
        public let effectiveDate: String?
        /// Specifies whether to send messages or push notifications to the endpoint. Valid values are: ACTIVE, messages are sent to the endpoint; and, INACTIVE, messages aren’t sent to the endpoint. Amazon Pinpoint automatically sets this value to ACTIVE when you create an endpoint or update an existing endpoint. Amazon Pinpoint automatically sets this value to INACTIVE if you update another endpoint that has the same address specified by the Address property.
        public let endpointStatus: String?
        /// The unique identifier for the endpoint in the context of the batch.
        public let id: String?
        /// The geographic information for the endpoint.
        public let location: EndpointLocation?
        /// One or more custom metrics that your app reports to Amazon Pinpoint for the endpoint.
        public let metrics: [String: Double]?
        /// Specifies whether the user who's associated with the endpoint has opted out of receiving messages and push notifications from you. Possible values are: ALL, the user has opted out and doesn't want to receive any messages or push notifications; and, NONE, the user hasn't opted out and wants to receive all messages and push notifications.
        public let optOut: String?
        /// The unique identifier for the request to create or update the endpoint.
        public let requestId: String?
        /// One or more custom attributes that describe the user who's associated with the endpoint.
        public let user: EndpointUser?

        public init(address: String? = nil, attributes: [String: [String]]? = nil, channelType: ChannelType? = nil, demographic: EndpointDemographic? = nil, effectiveDate: String? = nil, endpointStatus: String? = nil, id: String? = nil, location: EndpointLocation? = nil, metrics: [String: Double]? = nil, optOut: String? = nil, requestId: String? = nil, user: EndpointUser? = nil) {
            self.address = address
            self.attributes = attributes
            self.channelType = channelType
            self.demographic = demographic
            self.effectiveDate = effectiveDate
            self.endpointStatus = endpointStatus
            self.id = id
            self.location = location
            self.metrics = metrics
            self.optOut = optOut
            self.requestId = requestId
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case attributes = "Attributes"
            case channelType = "ChannelType"
            case demographic = "Demographic"
            case effectiveDate = "EffectiveDate"
            case endpointStatus = "EndpointStatus"
            case id = "Id"
            case location = "Location"
            case metrics = "Metrics"
            case optOut = "OptOut"
            case requestId = "RequestId"
            case user = "User"
        }
    }

    public struct EndpointBatchRequest: AWSEncodableShape {
        /// An array that defines the endpoints to create or update and, for each endpoint, the property values to set or change. An array can contain a maximum of 100 items.
        public let item: [EndpointBatchItem]

        public init(item: [EndpointBatchItem]) {
            self.item = item
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
        }
    }

    public struct EndpointDemographic: AWSEncodableShape & AWSDecodableShape {
        /// The version of the app that's associated with the endpoint.
        public let appVersion: String?
        /// The locale of the endpoint, in the following format: the ISO 639-1 alpha-2 code, followed by an underscore (_), followed by an ISO 3166-1 alpha-2 value.
        public let locale: String?
        /// The manufacturer of the endpoint device, such as apple or samsung.
        public let make: String?
        /// The model name or number of the endpoint device, such as iPhone or SM-G900F.
        public let model: String?
        /// The model version of the endpoint device.
        public let modelVersion: String?
        /// The platform of the endpoint device, such as ios.
        public let platform: String?
        /// The platform version of the endpoint device.
        public let platformVersion: String?
        /// The time zone of the endpoint, specified as a tz database name value, such as America/Los_Angeles.
        public let timezone: String?

        public init(appVersion: String? = nil, locale: String? = nil, make: String? = nil, model: String? = nil, modelVersion: String? = nil, platform: String? = nil, platformVersion: String? = nil, timezone: String? = nil) {
            self.appVersion = appVersion
            self.locale = locale
            self.make = make
            self.model = model
            self.modelVersion = modelVersion
            self.platform = platform
            self.platformVersion = platformVersion
            self.timezone = timezone
        }

        private enum CodingKeys: String, CodingKey {
            case appVersion = "AppVersion"
            case locale = "Locale"
            case make = "Make"
            case model = "Model"
            case modelVersion = "ModelVersion"
            case platform = "Platform"
            case platformVersion = "PlatformVersion"
            case timezone = "Timezone"
        }
    }

    public struct EndpointItemResponse: AWSDecodableShape {
        /// The custom message that's returned in the response as a result of processing the endpoint data.
        public let message: String?
        /// The status code that's returned in the response as a result of processing the endpoint data.
        public let statusCode: Int?

        public init(message: String? = nil, statusCode: Int? = nil) {
            self.message = message
            self.statusCode = statusCode
        }

        private enum CodingKeys: String, CodingKey {
            case message = "Message"
            case statusCode = "StatusCode"
        }
    }

    public struct EndpointLocation: AWSEncodableShape & AWSDecodableShape {
        /// The name of the city where the endpoint is located.
        public let city: String?
        /// The two-character code, in ISO 3166-1 alpha-2 format, for the country or region where the endpoint is located. For example, US for the United States.
        public let country: String?
        /// The latitude coordinate of the endpoint location, rounded to one decimal place.
        public let latitude: Double?
        /// The longitude coordinate of the endpoint location, rounded to one decimal place.
        public let longitude: Double?
        /// The postal or ZIP code for the area where the endpoint is located.
        public let postalCode: String?
        /// The name of the region where the endpoint is located. For locations in the United States, this value is the name of a state.
        public let region: String?

        public init(city: String? = nil, country: String? = nil, latitude: Double? = nil, longitude: Double? = nil, postalCode: String? = nil, region: String? = nil) {
            self.city = city
            self.country = country
            self.latitude = latitude
            self.longitude = longitude
            self.postalCode = postalCode
            self.region = region
        }

        private enum CodingKeys: String, CodingKey {
            case city = "City"
            case country = "Country"
            case latitude = "Latitude"
            case longitude = "Longitude"
            case postalCode = "PostalCode"
            case region = "Region"
        }
    }

    public struct EndpointMessageResult: AWSDecodableShape {
        /// The endpoint address that the message was delivered to.
        public let address: String?
        /// The delivery status of the message. Possible values are:  DUPLICATE - The endpoint address is a duplicate of another endpoint address. Amazon Pinpoint won't attempt to send the message again. OPT_OUT - The user who's associated with the endpoint has opted out of receiving messages from you. Amazon Pinpoint won't attempt to send the message again. PERMANENT_FAILURE - An error occurred when delivering the message to the endpoint. Amazon Pinpoint won't attempt to send the message again.    SUCCESSFUL - The message was successfully delivered to the endpoint. TEMPORARY_FAILURE - A temporary error occurred. Amazon Pinpoint won't attempt to send the message again. THROTTLED - Amazon Pinpoint throttled the operation to send the message to the endpoint. TIMEOUT - The message couldn't be sent within the timeout period. UNKNOWN_FAILURE - An unknown error occurred.
        public let deliveryStatus: DeliveryStatus
        /// The unique identifier for the message that was sent.
        public let messageId: String?
        /// The downstream service status code for delivering the message.
        public let statusCode: Int
        /// The status message for delivering the message.
        public let statusMessage: String?
        /// For push notifications that are sent through the GCM channel, specifies whether the endpoint's device registration token was updated as part of delivering the message.
        public let updatedToken: String?

        public init(address: String? = nil, deliveryStatus: DeliveryStatus, messageId: String? = nil, statusCode: Int, statusMessage: String? = nil, updatedToken: String? = nil) {
            self.address = address
            self.deliveryStatus = deliveryStatus
            self.messageId = messageId
            self.statusCode = statusCode
            self.statusMessage = statusMessage
            self.updatedToken = updatedToken
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case deliveryStatus = "DeliveryStatus"
            case messageId = "MessageId"
            case statusCode = "StatusCode"
            case statusMessage = "StatusMessage"
            case updatedToken = "UpdatedToken"
        }
    }

    public struct EndpointRequest: AWSEncodableShape {
        /// The destination address for messages or push notifications that you send to the endpoint. The address varies by channel. For a push-notification channel, use the token provided by the push notification service, such as an Apple Push Notification service (APNs) device token or a Firebase Cloud Messaging (FCM) registration token. For the SMS channel, use a phone number in E.164 format, such as +12065550100. For the email channel, use an email address.
        public let address: String?
        /// One or more custom attributes that describe the endpoint by associating a name with an array of values. For example, the value of a custom attribute named Interests might be: ["Science", "Music", "Travel"]. You can use these attributes as filter criteria when you create segments. Attribute names are case sensitive. An attribute name can contain up to 50 characters. An attribute value can contain up to 100 characters. When you define the name of a custom attribute, avoid using the following characters: number sign (#), colon (:), question mark (?), backslash (\), and slash (/). The Amazon Pinpoint console can't display attribute names that contain these characters. This restriction doesn't apply to attribute values.
        public let attributes: [String: [String]]?
        /// The channel to use when sending messages or push notifications to the endpoint.
        public let channelType: ChannelType?
        /// The demographic information for the endpoint, such as the time zone and platform.
        public let demographic: EndpointDemographic?
        /// The date and time, in ISO 8601 format, when the endpoint is updated.
        public let effectiveDate: String?
        /// Specifies whether to send messages or push notifications to the endpoint. Valid values are: ACTIVE, messages are sent to the endpoint; and, INACTIVE, messages aren’t sent to the endpoint. Amazon Pinpoint automatically sets this value to ACTIVE when you create an endpoint or update an existing endpoint. Amazon Pinpoint automatically sets this value to INACTIVE if you update another endpoint that has the same address specified by the Address property.
        public let endpointStatus: String?
        /// The geographic information for the endpoint.
        public let location: EndpointLocation?
        /// One or more custom metrics that your app reports to Amazon Pinpoint for the endpoint.
        public let metrics: [String: Double]?
        /// Specifies whether the user who's associated with the endpoint has opted out of receiving messages and push notifications from you. Possible values are: ALL, the user has opted out and doesn't want to receive any messages or push notifications; and, NONE, the user hasn't opted out and wants to receive all messages and push notifications.
        public let optOut: String?
        /// The unique identifier for the most recent request to update the endpoint.
        public let requestId: String?
        /// One or more custom attributes that describe the user who's associated with the endpoint.
        public let user: EndpointUser?

        public init(address: String? = nil, attributes: [String: [String]]? = nil, channelType: ChannelType? = nil, demographic: EndpointDemographic? = nil, effectiveDate: String? = nil, endpointStatus: String? = nil, location: EndpointLocation? = nil, metrics: [String: Double]? = nil, optOut: String? = nil, requestId: String? = nil, user: EndpointUser? = nil) {
            self.address = address
            self.attributes = attributes
            self.channelType = channelType
            self.demographic = demographic
            self.effectiveDate = effectiveDate
            self.endpointStatus = endpointStatus
            self.location = location
            self.metrics = metrics
            self.optOut = optOut
            self.requestId = requestId
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case attributes = "Attributes"
            case channelType = "ChannelType"
            case demographic = "Demographic"
            case effectiveDate = "EffectiveDate"
            case endpointStatus = "EndpointStatus"
            case location = "Location"
            case metrics = "Metrics"
            case optOut = "OptOut"
            case requestId = "RequestId"
            case user = "User"
        }
    }

    public struct EndpointResponse: AWSDecodableShape {
        /// The destination address for messages or push notifications that you send to the endpoint. The address varies by channel. For example, the address for a push-notification channel is typically the token provided by a push notification service, such as an Apple Push Notification service (APNs) device token or a Firebase Cloud Messaging (FCM) registration token. The address for the SMS channel is a phone number in E.164 format, such as +12065550100. The address for the email channel is an email address.
        public let address: String?
        /// The unique identifier for the application that's associated with the endpoint.
        public let applicationId: String?
        /// One or more custom attributes that describe the endpoint by associating a name with an array of values. For example, the value of a custom attribute named Interests might be: ["Science", "Music", "Travel"]. You can use these attributes as filter criteria when you create segments.
        public let attributes: [String: [String]]?
        /// The channel that's used when sending messages or push notifications to the endpoint.
        public let channelType: ChannelType?
        /// A number from 0-99 that represents the cohort that the endpoint is assigned to. Endpoints are grouped into cohorts randomly, and each cohort contains approximately 1 percent of the endpoints for an application. Amazon Pinpoint assigns cohorts to the holdout or treatment allocations for campaigns.
        public let cohortId: String?
        /// The date and time, in ISO 8601 format, when the endpoint was created.
        public let creationDate: String?
        /// The demographic information for the endpoint, such as the time zone and platform.
        public let demographic: EndpointDemographic?
        /// The date and time, in ISO 8601 format, when the endpoint was last updated.
        public let effectiveDate: String?
        /// Specifies whether messages or push notifications are sent to the endpoint. Possible values are: ACTIVE, messages are sent to the endpoint; and, INACTIVE, messages aren’t sent to the endpoint. Amazon Pinpoint automatically sets this value to ACTIVE when you create an endpoint or update an existing endpoint. Amazon Pinpoint automatically sets this value to INACTIVE if you update another endpoint that has the same address specified by the Address property.
        public let endpointStatus: String?
        /// The unique identifier that you assigned to the endpoint. The identifier should be a globally unique identifier (GUID) to ensure that it doesn't conflict with other endpoint identifiers that are associated with the application.
        public let id: String?
        /// The geographic information for the endpoint.
        public let location: EndpointLocation?
        /// One or more custom metrics that your app reports to Amazon Pinpoint for the endpoint.
        public let metrics: [String: Double]?
        /// Specifies whether the user who's associated with the endpoint has opted out of receiving messages and push notifications from you. Possible values are: ALL, the user has opted out and doesn't want to receive any messages or push notifications; and, NONE, the user hasn't opted out and wants to receive all messages and push notifications.
        public let optOut: String?
        /// The unique identifier for the most recent request to update the endpoint.
        public let requestId: String?
        /// One or more custom user attributes that your app reports to Amazon Pinpoint for the user who's associated with the endpoint.
        public let user: EndpointUser?

        public init(address: String? = nil, applicationId: String? = nil, attributes: [String: [String]]? = nil, channelType: ChannelType? = nil, cohortId: String? = nil, creationDate: String? = nil, demographic: EndpointDemographic? = nil, effectiveDate: String? = nil, endpointStatus: String? = nil, id: String? = nil, location: EndpointLocation? = nil, metrics: [String: Double]? = nil, optOut: String? = nil, requestId: String? = nil, user: EndpointUser? = nil) {
            self.address = address
            self.applicationId = applicationId
            self.attributes = attributes
            self.channelType = channelType
            self.cohortId = cohortId
            self.creationDate = creationDate
            self.demographic = demographic
            self.effectiveDate = effectiveDate
            self.endpointStatus = endpointStatus
            self.id = id
            self.location = location
            self.metrics = metrics
            self.optOut = optOut
            self.requestId = requestId
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case applicationId = "ApplicationId"
            case attributes = "Attributes"
            case channelType = "ChannelType"
            case cohortId = "CohortId"
            case creationDate = "CreationDate"
            case demographic = "Demographic"
            case effectiveDate = "EffectiveDate"
            case endpointStatus = "EndpointStatus"
            case id = "Id"
            case location = "Location"
            case metrics = "Metrics"
            case optOut = "OptOut"
            case requestId = "RequestId"
            case user = "User"
        }
    }

    public struct EndpointSendConfiguration: AWSEncodableShape {
        /// The body of the message. If specified, this value overrides the default message body.
        public let bodyOverride: String?
        /// A map of custom attributes to attach to the message for the address. Attribute names are case sensitive. For a push notification, this payload is added to the data.pinpoint object. For an email or text message, this payload is added to email/SMS delivery receipt event attributes.
        public let context: [String: String]?
        /// The raw, JSON-formatted string to use as the payload for the message. If specified, this value overrides all other values for the message.
        public let rawContent: String?
        /// A map of the message variables to merge with the variables specified for the default message (DefaultMessage.Substitutions). The variables specified in this map take precedence over all other variables.
        public let substitutions: [String: [String]]?
        /// The title or subject line of the message. If specified, this value overrides the default message title or subject line.
        public let titleOverride: String?

        public init(bodyOverride: String? = nil, context: [String: String]? = nil, rawContent: String? = nil, substitutions: [String: [String]]? = nil, titleOverride: String? = nil) {
            self.bodyOverride = bodyOverride
            self.context = context
            self.rawContent = rawContent
            self.substitutions = substitutions
            self.titleOverride = titleOverride
        }

        private enum CodingKeys: String, CodingKey {
            case bodyOverride = "BodyOverride"
            case context = "Context"
            case rawContent = "RawContent"
            case substitutions = "Substitutions"
            case titleOverride = "TitleOverride"
        }
    }

    public struct EndpointUser: AWSEncodableShape & AWSDecodableShape {
        /// One or more custom attributes that describe the user by associating a name with an array of values. For example, the value of an attribute named Interests might be: ["Science", "Music", "Travel"]. You can use these attributes as filter criteria when you create segments. Attribute names are case sensitive. An attribute name can contain up to 50 characters. An attribute value can contain up to 100 characters. When you define the name of a custom attribute, avoid using the following characters: number sign (#), colon (:), question mark (?), backslash (\), and slash (/). The Amazon Pinpoint console can't display attribute names that contain these characters. This restriction doesn't apply to attribute values.
        public let userAttributes: [String: [String]]?
        /// The unique identifier for the user.
        public let userId: String?

        public init(userAttributes: [String: [String]]? = nil, userId: String? = nil) {
            self.userAttributes = userAttributes
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case userAttributes = "UserAttributes"
            case userId = "UserId"
        }
    }

    public struct EndpointsResponse: AWSDecodableShape {
        /// An array of responses, one for each endpoint that's associated with the user ID.
        public let item: [EndpointResponse]

        public init(item: [EndpointResponse]) {
            self.item = item
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
        }
    }

    public struct Event: AWSEncodableShape {
        /// The package name of the app that's recording the event.
        public let appPackageName: String?
        /// The title of the app that's recording the event.
        public let appTitle: String?
        /// The version number of the app that's recording the event.
        public let appVersionCode: String?
        /// One or more custom attributes that are associated with the event.
        public let attributes: [String: String]?
        /// The version of the SDK that's running on the client device.
        public let clientSdkVersion: String?
        /// The name of the event.
        public let eventType: String
        /// One or more custom metrics that are associated with the event.
        public let metrics: [String: Double]?
        /// The name of the SDK that's being used to record the event.
        public let sdkName: String?
        /// Information about the session in which the event occurred.
        public let session: Session?
        /// The date and time, in ISO 8601 format, when the event occurred.
        public let timestamp: String

        public init(appPackageName: String? = nil, appTitle: String? = nil, appVersionCode: String? = nil, attributes: [String: String]? = nil, clientSdkVersion: String? = nil, eventType: String, metrics: [String: Double]? = nil, sdkName: String? = nil, session: Session? = nil, timestamp: String) {
            self.appPackageName = appPackageName
            self.appTitle = appTitle
            self.appVersionCode = appVersionCode
            self.attributes = attributes
            self.clientSdkVersion = clientSdkVersion
            self.eventType = eventType
            self.metrics = metrics
            self.sdkName = sdkName
            self.session = session
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case appPackageName = "AppPackageName"
            case appTitle = "AppTitle"
            case appVersionCode = "AppVersionCode"
            case attributes = "Attributes"
            case clientSdkVersion = "ClientSdkVersion"
            case eventType = "EventType"
            case metrics = "Metrics"
            case sdkName = "SdkName"
            case session = "Session"
            case timestamp = "Timestamp"
        }
    }

    public struct EventCondition: AWSEncodableShape & AWSDecodableShape {
        /// The dimensions for the event filter to use for the activity.
        public let dimensions: EventDimensions?
        /// The message identifier (message_id) for the message to use when determining whether message events meet the condition.
        public let messageActivity: String?

        public init(dimensions: EventDimensions? = nil, messageActivity: String? = nil) {
            self.dimensions = dimensions
            self.messageActivity = messageActivity
        }

        private enum CodingKeys: String, CodingKey {
            case dimensions = "Dimensions"
            case messageActivity = "MessageActivity"
        }
    }

    public struct EventDimensions: AWSEncodableShape & AWSDecodableShape {
        /// One or more custom attributes that your application reports to Amazon Pinpoint. You can use these attributes as selection criteria when you create an event filter.
        public let attributes: [String: AttributeDimension]?
        /// The name of the event that causes the campaign to be sent or the journey activity to be performed. This can be a standard event that Amazon Pinpoint generates, such as _email.delivered. For campaigns, this can also be a custom event that's specific to your application. For information about standard events, see Streaming Amazon Pinpoint Events in the Amazon Pinpoint Developer Guide.
        public let eventType: SetDimension?
        /// One or more custom metrics that your application reports to Amazon Pinpoint. You can use these metrics as selection criteria when you create an event filter.
        public let metrics: [String: MetricDimension]?

        public init(attributes: [String: AttributeDimension]? = nil, eventType: SetDimension? = nil, metrics: [String: MetricDimension]? = nil) {
            self.attributes = attributes
            self.eventType = eventType
            self.metrics = metrics
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
            case eventType = "EventType"
            case metrics = "Metrics"
        }
    }

    public struct EventFilter: AWSEncodableShape & AWSDecodableShape {
        /// The dimensions for the event filter to use for the campaign or the journey activity.
        public let dimensions: EventDimensions
        /// The type of event that causes the campaign to be sent or the journey activity to be performed. Valid values are: SYSTEM, sends the campaign or performs the activity when a system event occurs; and, ENDPOINT, sends the campaign or performs the activity when an endpoint event (Events resource) occurs.
        public let filterType: FilterType

        public init(dimensions: EventDimensions, filterType: FilterType) {
            self.dimensions = dimensions
            self.filterType = filterType
        }

        private enum CodingKeys: String, CodingKey {
            case dimensions = "Dimensions"
            case filterType = "FilterType"
        }
    }

    public struct EventItemResponse: AWSDecodableShape {
        /// A custom message that's returned in the response as a result of processing the event.
        public let message: String?
        /// The status code that's returned in the response as a result of processing the event. Possible values are: 202, for events that were accepted; and, 400, for events that weren't valid.
        public let statusCode: Int?

        public init(message: String? = nil, statusCode: Int? = nil) {
            self.message = message
            self.statusCode = statusCode
        }

        private enum CodingKeys: String, CodingKey {
            case message = "Message"
            case statusCode = "StatusCode"
        }
    }

    public struct EventStartCondition: AWSEncodableShape & AWSDecodableShape {
        public let eventFilter: EventFilter?
        public let segmentId: String?

        public init(eventFilter: EventFilter? = nil, segmentId: String? = nil) {
            self.eventFilter = eventFilter
            self.segmentId = segmentId
        }

        private enum CodingKeys: String, CodingKey {
            case eventFilter = "EventFilter"
            case segmentId = "SegmentId"
        }
    }

    public struct EventStream: AWSDecodableShape {
        /// The unique identifier for the application to publish event data for.
        public let applicationId: String
        /// The Amazon Resource Name (ARN) of the Amazon Kinesis data stream or Amazon Kinesis Data Firehose delivery stream to publish event data to. For a Kinesis data stream, the ARN format is: arn:aws:kinesis:region:account-id:stream/stream_name
        ///                 For a Kinesis Data Firehose delivery stream, the ARN format is: arn:aws:firehose:region:account-id:deliverystream/stream_name
        public let destinationStreamArn: String
        /// (Deprecated) Your AWS account ID, which you assigned to an external ID key in an IAM trust policy. Amazon Pinpoint previously used this value to assume an IAM role when publishing event data, but we removed this requirement. We don't recommend use of external IDs for IAM roles that are assumed by Amazon Pinpoint.
        public let externalId: String?
        /// The date, in ISO 8601 format, when the event stream was last modified.
        public let lastModifiedDate: String?
        /// The IAM user who last modified the event stream.
        public let lastUpdatedBy: String?
        /// The AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to publish event data to the stream in your AWS account.
        public let roleArn: String

        public init(applicationId: String, destinationStreamArn: String, externalId: String? = nil, lastModifiedDate: String? = nil, lastUpdatedBy: String? = nil, roleArn: String) {
            self.applicationId = applicationId
            self.destinationStreamArn = destinationStreamArn
            self.externalId = externalId
            self.lastModifiedDate = lastModifiedDate
            self.lastUpdatedBy = lastUpdatedBy
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case destinationStreamArn = "DestinationStreamArn"
            case externalId = "ExternalId"
            case lastModifiedDate = "LastModifiedDate"
            case lastUpdatedBy = "LastUpdatedBy"
            case roleArn = "RoleArn"
        }
    }

    public struct EventsBatch: AWSEncodableShape {
        /// A set of properties and attributes that are associated with the endpoint.
        public let endpoint: PublicEndpoint
        /// A set of properties that are associated with the event.
        public let events: [String: Event]

        public init(endpoint: PublicEndpoint, events: [String: Event]) {
            self.endpoint = endpoint
            self.events = events
        }

        private enum CodingKeys: String, CodingKey {
            case endpoint = "Endpoint"
            case events = "Events"
        }
    }

    public struct EventsRequest: AWSEncodableShape {
        /// The batch of events to process. For each item in a batch, the endpoint ID acts as a key that has an EventsBatch object as its value.
        public let batchItem: [String: EventsBatch]

        public init(batchItem: [String: EventsBatch]) {
            self.batchItem = batchItem
        }

        private enum CodingKeys: String, CodingKey {
            case batchItem = "BatchItem"
        }
    }

    public struct EventsResponse: AWSDecodableShape {
        /// A map that contains a multipart response for each endpoint. For each item in this object, the endpoint ID is the key and the item response is the value. If no item response exists, the value can also be one of the following: 202, the request was processed successfully; or 400, the payload wasn't valid or required fields were missing.
        public let results: [String: ItemResponse]?

        public init(results: [String: ItemResponse]? = nil) {
            self.results = results
        }

        private enum CodingKeys: String, CodingKey {
            case results = "Results"
        }
    }

    public struct ExportJobRequest: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to access the Amazon S3 location where you want to export endpoint definitions to.
        public let roleArn: String
        /// The URL of the location in an Amazon Simple Storage Service (Amazon S3) bucket where you want to export endpoint definitions to. This location is typically a folder that contains multiple files. The URL should be in the following format: s3://bucket-name/folder-name/.
        public let s3UrlPrefix: String
        /// The identifier for the segment to export endpoint definitions from. If you don't specify this value, Amazon Pinpoint exports definitions for all the endpoints that are associated with the application.
        public let segmentId: String?
        /// The version of the segment to export endpoint definitions from, if specified.
        public let segmentVersion: Int?

        public init(roleArn: String, s3UrlPrefix: String, segmentId: String? = nil, segmentVersion: Int? = nil) {
            self.roleArn = roleArn
            self.s3UrlPrefix = s3UrlPrefix
            self.segmentId = segmentId
            self.segmentVersion = segmentVersion
        }

        private enum CodingKeys: String, CodingKey {
            case roleArn = "RoleArn"
            case s3UrlPrefix = "S3UrlPrefix"
            case segmentId = "SegmentId"
            case segmentVersion = "SegmentVersion"
        }
    }

    public struct ExportJobResource: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorized Amazon Pinpoint to access the Amazon S3 location where the endpoint definitions were exported to.
        public let roleArn: String
        /// The URL of the location in an Amazon Simple Storage Service (Amazon S3) bucket where the endpoint definitions were exported to. This location is typically a folder that contains multiple files. The URL should be in the following format: s3://bucket-name/folder-name/.
        public let s3UrlPrefix: String
        /// The identifier for the segment that the endpoint definitions were exported from. If this value isn't present, Amazon Pinpoint exported definitions for all the endpoints that are associated with the application.
        public let segmentId: String?
        /// The version of the segment that the endpoint definitions were exported from.
        public let segmentVersion: Int?

        public init(roleArn: String, s3UrlPrefix: String, segmentId: String? = nil, segmentVersion: Int? = nil) {
            self.roleArn = roleArn
            self.s3UrlPrefix = s3UrlPrefix
            self.segmentId = segmentId
            self.segmentVersion = segmentVersion
        }

        private enum CodingKeys: String, CodingKey {
            case roleArn = "RoleArn"
            case s3UrlPrefix = "S3UrlPrefix"
            case segmentId = "SegmentId"
            case segmentVersion = "SegmentVersion"
        }
    }

    public struct ExportJobResponse: AWSDecodableShape {
        /// The unique identifier for the application that's associated with the export job.
        public let applicationId: String
        /// The number of pieces that were processed successfully (completed) by the export job, as of the time of the request.
        public let completedPieces: Int?
        /// The date, in ISO 8601 format, when the export job was completed.
        public let completionDate: String?
        /// The date, in ISO 8601 format, when the export job was created.
        public let creationDate: String
        /// The resource settings that apply to the export job.
        public let definition: ExportJobResource
        /// The number of pieces that weren't processed successfully (failed) by the export job, as of the time of the request.
        public let failedPieces: Int?
        /// An array of entries, one for each of the first 100 entries that weren't processed successfully (failed) by the export job, if any.
        public let failures: [String]?
        /// The unique identifier for the export job.
        public let id: String
        /// The status of the export job. The job status is FAILED if Amazon Pinpoint wasn't able to process one or more pieces in the job.
        public let jobStatus: JobStatus
        /// The total number of endpoint definitions that weren't processed successfully (failed) by the export job, typically because an error, such as a syntax error, occurred.
        public let totalFailures: Int?
        /// The total number of pieces that must be processed to complete the export job. Each piece consists of an approximately equal portion of the endpoint definitions that are part of the export job.
        public let totalPieces: Int?
        /// The total number of endpoint definitions that were processed by the export job.
        public let totalProcessed: Int?
        /// The job type. This value is EXPORT for export jobs.
        public let type: String

        public init(applicationId: String, completedPieces: Int? = nil, completionDate: String? = nil, creationDate: String, definition: ExportJobResource, failedPieces: Int? = nil, failures: [String]? = nil, id: String, jobStatus: JobStatus, totalFailures: Int? = nil, totalPieces: Int? = nil, totalProcessed: Int? = nil, type: String) {
            self.applicationId = applicationId
            self.completedPieces = completedPieces
            self.completionDate = completionDate
            self.creationDate = creationDate
            self.definition = definition
            self.failedPieces = failedPieces
            self.failures = failures
            self.id = id
            self.jobStatus = jobStatus
            self.totalFailures = totalFailures
            self.totalPieces = totalPieces
            self.totalProcessed = totalProcessed
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case completedPieces = "CompletedPieces"
            case completionDate = "CompletionDate"
            case creationDate = "CreationDate"
            case definition = "Definition"
            case failedPieces = "FailedPieces"
            case failures = "Failures"
            case id = "Id"
            case jobStatus = "JobStatus"
            case totalFailures = "TotalFailures"
            case totalPieces = "TotalPieces"
            case totalProcessed = "TotalProcessed"
            case type = "Type"
        }
    }

    public struct ExportJobsResponse: AWSDecodableShape {
        /// An array of responses, one for each export job that's associated with the application (Export Jobs resource) or segment (Segment Export Jobs resource).
        public let item: [ExportJobResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [ExportJobResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct GCMChannelRequest: AWSEncodableShape {
        /// The Web API Key, also referred to as an API_KEY or server key, that you received from Google to communicate with Google services.
        public let apiKey: String
        /// Specifies whether to enable the GCM channel for the application.
        public let enabled: Bool?

        public init(apiKey: String, enabled: Bool? = nil) {
            self.apiKey = apiKey
            self.enabled = enabled
        }

        private enum CodingKeys: String, CodingKey {
            case apiKey = "ApiKey"
            case enabled = "Enabled"
        }
    }

    public struct GCMChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the GCM channel applies to.
        public let applicationId: String?
        /// The date and time when the GCM channel was enabled.
        public let creationDate: String?
        /// The Web API Key, also referred to as an API_KEY or server key, that you received from Google to communicate with Google services.
        public let credential: String
        /// Specifies whether the GCM channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the GCM channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the GCM channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the GCM channel.
        public let lastModifiedBy: String?
        /// The date and time when the GCM channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the GCM channel, this value is GCM.
        public let platform: String
        /// The current version of the GCM channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, credential: String, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.credential = credential
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case credential = "Credential"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct GCMMessage: AWSEncodableShape {
        /// The action to occur if the recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking features of the Android platform. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The body of the notification message.
        public let body: String?
        /// An arbitrary string that identifies a group of messages that can be collapsed to ensure that only the last message is sent when delivery can resume. This helps avoid sending too many instances of the same messages when the recipient's device comes online again or becomes active. Amazon Pinpoint specifies this value in the Firebase Cloud Messaging (FCM) collapse_key parameter when it sends the notification message to FCM.
        public let collapseKey: String?
        /// The JSON data payload to use for the push notification, if the notification is a silent push notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
        public let data: [String: String]?
        /// The icon image name of the asset saved in your app.
        public let iconReference: String?
        /// The URL of the large icon image to display in the content view of the push notification.
        public let imageIconUrl: String?
        /// The URL of an image to display in the push notification.
        public let imageUrl: String?
        /// para>normal - The notification might be delayed. Delivery is optimized for battery usage on the recipient's device. Use this value unless immediate delivery is required./listitem> high - The notification is sent immediately and might wake a sleeping device./para> Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification message to FCM. The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high. If you specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the corresponding FCM value.
        public let priority: String?
        /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message.
        public let rawContent: String?
        /// The package name of the application where registration tokens must match in order for the recipient to receive the message.
        public let restrictedPackageName: String?
        /// Specifies whether the notification is a silent push notification, which is a push notification that doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating an app's configuration or supporting phone home functionality.
        public let silentPush: Bool?
        /// The URL of the small icon image to display in the status bar and the content view of the push notification.
        public let smallImageIconUrl: String?
        /// The sound to play when the recipient receives the push notification. You can use the default stream or specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside in /res/raw/.
        public let sound: String?
        /// The default message variables to use in the notification message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The amount of time, in seconds, that FCM should store and attempt to deliver the push notification, if the service is unable to deliver the notification the first time. If you don't specify this value, FCM defaults to the maximum value, which is 2,419,200 seconds (28 days). Amazon Pinpoint specifies this value in the FCM time_to_live parameter when it sends the notification message to FCM.
        public let timeToLive: Int?
        /// The title to display above the notification message on the recipient's device.
        public let title: String?
        /// The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, collapseKey: String? = nil, data: [String: String]? = nil, iconReference: String? = nil, imageIconUrl: String? = nil, imageUrl: String? = nil, priority: String? = nil, rawContent: String? = nil, restrictedPackageName: String? = nil, silentPush: Bool? = nil, smallImageIconUrl: String? = nil, sound: String? = nil, substitutions: [String: [String]]? = nil, timeToLive: Int? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.collapseKey = collapseKey
            self.data = data
            self.iconReference = iconReference
            self.imageIconUrl = imageIconUrl
            self.imageUrl = imageUrl
            self.priority = priority
            self.rawContent = rawContent
            self.restrictedPackageName = restrictedPackageName
            self.silentPush = silentPush
            self.smallImageIconUrl = smallImageIconUrl
            self.sound = sound
            self.substitutions = substitutions
            self.timeToLive = timeToLive
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case collapseKey = "CollapseKey"
            case data = "Data"
            case iconReference = "IconReference"
            case imageIconUrl = "ImageIconUrl"
            case imageUrl = "ImageUrl"
            case priority = "Priority"
            case rawContent = "RawContent"
            case restrictedPackageName = "RestrictedPackageName"
            case silentPush = "SilentPush"
            case smallImageIconUrl = "SmallImageIconUrl"
            case sound = "Sound"
            case substitutions = "Substitutions"
            case timeToLive = "TimeToLive"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct GPSCoordinates: AWSEncodableShape & AWSDecodableShape {
        /// The latitude coordinate of the location.
        public let latitude: Double
        /// The longitude coordinate of the location.
        public let longitude: Double

        public init(latitude: Double, longitude: Double) {
            self.latitude = latitude
            self.longitude = longitude
        }

        private enum CodingKeys: String, CodingKey {
            case latitude = "Latitude"
            case longitude = "Longitude"
        }
    }

    public struct GPSPointDimension: AWSEncodableShape & AWSDecodableShape {
        /// The GPS coordinates to measure distance from.
        public let coordinates: GPSCoordinates
        /// The range, in kilometers, from the GPS coordinates.
        public let rangeInKilometers: Double?

        public init(coordinates: GPSCoordinates, rangeInKilometers: Double? = nil) {
            self.coordinates = coordinates
            self.rangeInKilometers = rangeInKilometers
        }

        private enum CodingKeys: String, CodingKey {
            case coordinates = "Coordinates"
            case rangeInKilometers = "RangeInKilometers"
        }
    }

    public struct GetAdmChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAdmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aDMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aDMChannelResponse", location: .body(locationName: "ADMChannelResponse"))
        ]

        public let aDMChannelResponse: ADMChannelResponse

        public init(aDMChannelResponse: ADMChannelResponse) {
            self.aDMChannelResponse = aDMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aDMChannelResponse = "ADMChannelResponse"
        }
    }

    public struct GetApnsChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApnsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSChannelResponse", location: .body(locationName: "APNSChannelResponse"))
        ]

        public let aPNSChannelResponse: APNSChannelResponse

        public init(aPNSChannelResponse: APNSChannelResponse) {
            self.aPNSChannelResponse = aPNSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSChannelResponse = "APNSChannelResponse"
        }
    }

    public struct GetApnsSandboxChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApnsSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSSandboxChannelResponse", location: .body(locationName: "APNSSandboxChannelResponse"))
        ]

        public let aPNSSandboxChannelResponse: APNSSandboxChannelResponse

        public init(aPNSSandboxChannelResponse: APNSSandboxChannelResponse) {
            self.aPNSSandboxChannelResponse = aPNSSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSSandboxChannelResponse = "APNSSandboxChannelResponse"
        }
    }

    public struct GetApnsVoipChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApnsVoipChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipChannelResponse", location: .body(locationName: "APNSVoipChannelResponse"))
        ]

        public let aPNSVoipChannelResponse: APNSVoipChannelResponse

        public init(aPNSVoipChannelResponse: APNSVoipChannelResponse) {
            self.aPNSVoipChannelResponse = aPNSVoipChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipChannelResponse = "APNSVoipChannelResponse"
        }
    }

    public struct GetApnsVoipSandboxChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApnsVoipSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipSandboxChannelResponse", location: .body(locationName: "APNSVoipSandboxChannelResponse"))
        ]

        public let aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse

        public init(aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse) {
            self.aPNSVoipSandboxChannelResponse = aPNSVoipSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipSandboxChannelResponse = "APNSVoipSandboxChannelResponse"
        }
    }

    public struct GetAppRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationResponse", location: .body(locationName: "ApplicationResponse"))
        ]

        public let applicationResponse: ApplicationResponse

        public init(applicationResponse: ApplicationResponse) {
            self.applicationResponse = applicationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case applicationResponse = "ApplicationResponse"
        }
    }

    public struct GetApplicationDateRangeKpiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "_endTime", location: .querystring(locationName: "end-time")),
            AWSMemberEncoding(label: "kpiName", location: .uri(locationName: "kpi-name")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "_startTime", location: .querystring(locationName: "start-time"))
        ]

        public let applicationId: String
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        public let kpiName: String
        public let nextToken: String?
        public let pageSize: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?

        public init(applicationId: String, endTime: Date? = nil, kpiName: String, nextToken: String? = nil, pageSize: String? = nil, startTime: Date? = nil) {
            self.applicationId = applicationId
            self.endTime = endTime
            self.kpiName = kpiName
            self.nextToken = nextToken
            self.pageSize = pageSize
            self.startTime = startTime
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApplicationDateRangeKpiResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationDateRangeKpiResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationDateRangeKpiResponse", location: .body(locationName: "ApplicationDateRangeKpiResponse"))
        ]

        public let applicationDateRangeKpiResponse: ApplicationDateRangeKpiResponse

        public init(applicationDateRangeKpiResponse: ApplicationDateRangeKpiResponse) {
            self.applicationDateRangeKpiResponse = applicationDateRangeKpiResponse
        }

        private enum CodingKeys: String, CodingKey {
            case applicationDateRangeKpiResponse = "ApplicationDateRangeKpiResponse"
        }
    }

    public struct GetApplicationSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApplicationSettingsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationSettingsResource"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationSettingsResource", location: .body(locationName: "ApplicationSettingsResource"))
        ]

        public let applicationSettingsResource: ApplicationSettingsResource

        public init(applicationSettingsResource: ApplicationSettingsResource) {
            self.applicationSettingsResource = applicationSettingsResource
        }

        private enum CodingKeys: String, CodingKey {
            case applicationSettingsResource = "ApplicationSettingsResource"
        }
    }

    public struct GetAppsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let pageSize: String?
        public let token: String?

        public init(pageSize: String? = nil, token: String? = nil) {
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationsResponse", location: .body(locationName: "ApplicationsResponse"))
        ]

        public let applicationsResponse: ApplicationsResponse

        public init(applicationsResponse: ApplicationsResponse) {
            self.applicationsResponse = applicationsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case applicationsResponse = "ApplicationsResponse"
        }
    }

    public struct GetBaiduChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetBaiduChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "baiduChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "baiduChannelResponse", location: .body(locationName: "BaiduChannelResponse"))
        ]

        public let baiduChannelResponse: BaiduChannelResponse

        public init(baiduChannelResponse: BaiduChannelResponse) {
            self.baiduChannelResponse = baiduChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case baiduChannelResponse = "BaiduChannelResponse"
        }
    }

    public struct GetCampaignActivitiesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let campaignId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, campaignId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignActivitiesResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "activitiesResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "activitiesResponse", location: .body(locationName: "ActivitiesResponse"))
        ]

        public let activitiesResponse: ActivitiesResponse

        public init(activitiesResponse: ActivitiesResponse) {
            self.activitiesResponse = activitiesResponse
        }

        private enum CodingKeys: String, CodingKey {
            case activitiesResponse = "ActivitiesResponse"
        }
    }

    public struct GetCampaignDateRangeKpiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id")),
            AWSMemberEncoding(label: "_endTime", location: .querystring(locationName: "end-time")),
            AWSMemberEncoding(label: "kpiName", location: .uri(locationName: "kpi-name")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "_startTime", location: .querystring(locationName: "start-time"))
        ]

        public let applicationId: String
        public let campaignId: String
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        public let kpiName: String
        public let nextToken: String?
        public let pageSize: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?

        public init(applicationId: String, campaignId: String, endTime: Date? = nil, kpiName: String, nextToken: String? = nil, pageSize: String? = nil, startTime: Date? = nil) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.endTime = endTime
            self.kpiName = kpiName
            self.nextToken = nextToken
            self.pageSize = pageSize
            self.startTime = startTime
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignDateRangeKpiResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignDateRangeKpiResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignDateRangeKpiResponse", location: .body(locationName: "CampaignDateRangeKpiResponse"))
        ]

        public let campaignDateRangeKpiResponse: CampaignDateRangeKpiResponse

        public init(campaignDateRangeKpiResponse: CampaignDateRangeKpiResponse) {
            self.campaignDateRangeKpiResponse = campaignDateRangeKpiResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignDateRangeKpiResponse = "CampaignDateRangeKpiResponse"
        }
    }

    public struct GetCampaignRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id"))
        ]

        public let applicationId: String
        public let campaignId: String

        public init(applicationId: String, campaignId: String) {
            self.applicationId = applicationId
            self.campaignId = campaignId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignResponse", location: .body(locationName: "CampaignResponse"))
        ]

        public let campaignResponse: CampaignResponse

        public init(campaignResponse: CampaignResponse) {
            self.campaignResponse = campaignResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignResponse = "CampaignResponse"
        }
    }

    public struct GetCampaignVersionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id")),
            AWSMemberEncoding(label: "version", location: .uri(locationName: "version"))
        ]

        public let applicationId: String
        public let campaignId: String
        public let version: String

        public init(applicationId: String, campaignId: String, version: String) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignVersionResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignResponse", location: .body(locationName: "CampaignResponse"))
        ]

        public let campaignResponse: CampaignResponse

        public init(campaignResponse: CampaignResponse) {
            self.campaignResponse = campaignResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignResponse = "CampaignResponse"
        }
    }

    public struct GetCampaignVersionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let campaignId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, campaignId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignVersionsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignsResponse", location: .body(locationName: "CampaignsResponse"))
        ]

        public let campaignsResponse: CampaignsResponse

        public init(campaignsResponse: CampaignsResponse) {
            self.campaignsResponse = campaignsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignsResponse = "CampaignsResponse"
        }
    }

    public struct GetCampaignsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCampaignsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignsResponse", location: .body(locationName: "CampaignsResponse"))
        ]

        public let campaignsResponse: CampaignsResponse

        public init(campaignsResponse: CampaignsResponse) {
            self.campaignsResponse = campaignsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignsResponse = "CampaignsResponse"
        }
    }

    public struct GetChannelsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetChannelsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "channelsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "channelsResponse", location: .body(locationName: "ChannelsResponse"))
        ]

        public let channelsResponse: ChannelsResponse

        public init(channelsResponse: ChannelsResponse) {
            self.channelsResponse = channelsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case channelsResponse = "ChannelsResponse"
        }
    }

    public struct GetEmailChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEmailChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "emailChannelResponse", location: .body(locationName: "EmailChannelResponse"))
        ]

        public let emailChannelResponse: EmailChannelResponse

        public init(emailChannelResponse: EmailChannelResponse) {
            self.emailChannelResponse = emailChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case emailChannelResponse = "EmailChannelResponse"
        }
    }

    public struct GetEmailTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEmailTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailTemplateResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "emailTemplateResponse", location: .body(locationName: "EmailTemplateResponse"))
        ]

        public let emailTemplateResponse: EmailTemplateResponse

        public init(emailTemplateResponse: EmailTemplateResponse) {
            self.emailTemplateResponse = emailTemplateResponse
        }

        private enum CodingKeys: String, CodingKey {
            case emailTemplateResponse = "EmailTemplateResponse"
        }
    }

    public struct GetEndpointRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "endpointId", location: .uri(locationName: "endpoint-id"))
        ]

        public let applicationId: String
        public let endpointId: String

        public init(applicationId: String, endpointId: String) {
            self.applicationId = applicationId
            self.endpointId = endpointId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEndpointResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "endpointResponse", location: .body(locationName: "EndpointResponse"))
        ]

        public let endpointResponse: EndpointResponse

        public init(endpointResponse: EndpointResponse) {
            self.endpointResponse = endpointResponse
        }

        private enum CodingKeys: String, CodingKey {
            case endpointResponse = "EndpointResponse"
        }
    }

    public struct GetEventStreamRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEventStreamResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "eventStream"
        public static var _encoding = [
            AWSMemberEncoding(label: "eventStream", location: .body(locationName: "EventStream"))
        ]

        public let eventStream: EventStream

        public init(eventStream: EventStream) {
            self.eventStream = eventStream
        }

        private enum CodingKeys: String, CodingKey {
            case eventStream = "EventStream"
        }
    }

    public struct GetExportJobRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "jobId", location: .uri(locationName: "job-id"))
        ]

        public let applicationId: String
        public let jobId: String

        public init(applicationId: String, jobId: String) {
            self.applicationId = applicationId
            self.jobId = jobId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetExportJobResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "exportJobResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "exportJobResponse", location: .body(locationName: "ExportJobResponse"))
        ]

        public let exportJobResponse: ExportJobResponse

        public init(exportJobResponse: ExportJobResponse) {
            self.exportJobResponse = exportJobResponse
        }

        private enum CodingKeys: String, CodingKey {
            case exportJobResponse = "ExportJobResponse"
        }
    }

    public struct GetExportJobsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetExportJobsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "exportJobsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "exportJobsResponse", location: .body(locationName: "ExportJobsResponse"))
        ]

        public let exportJobsResponse: ExportJobsResponse

        public init(exportJobsResponse: ExportJobsResponse) {
            self.exportJobsResponse = exportJobsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case exportJobsResponse = "ExportJobsResponse"
        }
    }

    public struct GetGcmChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetGcmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "gCMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "gCMChannelResponse", location: .body(locationName: "GCMChannelResponse"))
        ]

        public let gCMChannelResponse: GCMChannelResponse

        public init(gCMChannelResponse: GCMChannelResponse) {
            self.gCMChannelResponse = gCMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case gCMChannelResponse = "GCMChannelResponse"
        }
    }

    public struct GetImportJobRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "jobId", location: .uri(locationName: "job-id"))
        ]

        public let applicationId: String
        public let jobId: String

        public init(applicationId: String, jobId: String) {
            self.applicationId = applicationId
            self.jobId = jobId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetImportJobResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "importJobResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "importJobResponse", location: .body(locationName: "ImportJobResponse"))
        ]

        public let importJobResponse: ImportJobResponse

        public init(importJobResponse: ImportJobResponse) {
            self.importJobResponse = importJobResponse
        }

        private enum CodingKeys: String, CodingKey {
            case importJobResponse = "ImportJobResponse"
        }
    }

    public struct GetImportJobsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetImportJobsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "importJobsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "importJobsResponse", location: .body(locationName: "ImportJobsResponse"))
        ]

        public let importJobsResponse: ImportJobsResponse

        public init(importJobsResponse: ImportJobsResponse) {
            self.importJobsResponse = importJobsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case importJobsResponse = "ImportJobsResponse"
        }
    }

    public struct GetJourneyDateRangeKpiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "_endTime", location: .querystring(locationName: "end-time")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id")),
            AWSMemberEncoding(label: "kpiName", location: .uri(locationName: "kpi-name")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "_startTime", location: .querystring(locationName: "start-time"))
        ]

        public let applicationId: String
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        public let journeyId: String
        public let kpiName: String
        public let nextToken: String?
        public let pageSize: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?

        public init(applicationId: String, endTime: Date? = nil, journeyId: String, kpiName: String, nextToken: String? = nil, pageSize: String? = nil, startTime: Date? = nil) {
            self.applicationId = applicationId
            self.endTime = endTime
            self.journeyId = journeyId
            self.kpiName = kpiName
            self.nextToken = nextToken
            self.pageSize = pageSize
            self.startTime = startTime
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetJourneyDateRangeKpiResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyDateRangeKpiResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyDateRangeKpiResponse", location: .body(locationName: "JourneyDateRangeKpiResponse"))
        ]

        public let journeyDateRangeKpiResponse: JourneyDateRangeKpiResponse

        public init(journeyDateRangeKpiResponse: JourneyDateRangeKpiResponse) {
            self.journeyDateRangeKpiResponse = journeyDateRangeKpiResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyDateRangeKpiResponse = "JourneyDateRangeKpiResponse"
        }
    }

    public struct GetJourneyExecutionActivityMetricsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyActivityId", location: .uri(locationName: "journey-activity-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size"))
        ]

        public let applicationId: String
        public let journeyActivityId: String
        public let journeyId: String
        public let nextToken: String?
        public let pageSize: String?

        public init(applicationId: String, journeyActivityId: String, journeyId: String, nextToken: String? = nil, pageSize: String? = nil) {
            self.applicationId = applicationId
            self.journeyActivityId = journeyActivityId
            self.journeyId = journeyId
            self.nextToken = nextToken
            self.pageSize = pageSize
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetJourneyExecutionActivityMetricsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyExecutionActivityMetricsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyExecutionActivityMetricsResponse", location: .body(locationName: "JourneyExecutionActivityMetricsResponse"))
        ]

        public let journeyExecutionActivityMetricsResponse: JourneyExecutionActivityMetricsResponse

        public init(journeyExecutionActivityMetricsResponse: JourneyExecutionActivityMetricsResponse) {
            self.journeyExecutionActivityMetricsResponse = journeyExecutionActivityMetricsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyExecutionActivityMetricsResponse = "JourneyExecutionActivityMetricsResponse"
        }
    }

    public struct GetJourneyExecutionMetricsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size"))
        ]

        public let applicationId: String
        public let journeyId: String
        public let nextToken: String?
        public let pageSize: String?

        public init(applicationId: String, journeyId: String, nextToken: String? = nil, pageSize: String? = nil) {
            self.applicationId = applicationId
            self.journeyId = journeyId
            self.nextToken = nextToken
            self.pageSize = pageSize
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetJourneyExecutionMetricsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyExecutionMetricsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyExecutionMetricsResponse", location: .body(locationName: "JourneyExecutionMetricsResponse"))
        ]

        public let journeyExecutionMetricsResponse: JourneyExecutionMetricsResponse

        public init(journeyExecutionMetricsResponse: JourneyExecutionMetricsResponse) {
            self.journeyExecutionMetricsResponse = journeyExecutionMetricsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyExecutionMetricsResponse = "JourneyExecutionMetricsResponse"
        }
    }

    public struct GetJourneyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id"))
        ]

        public let applicationId: String
        public let journeyId: String

        public init(applicationId: String, journeyId: String) {
            self.applicationId = applicationId
            self.journeyId = journeyId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetJourneyResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyResponse", location: .body(locationName: "JourneyResponse"))
        ]

        public let journeyResponse: JourneyResponse

        public init(journeyResponse: JourneyResponse) {
            self.journeyResponse = journeyResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyResponse = "JourneyResponse"
        }
    }

    public struct GetPushTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPushTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "pushNotificationTemplateResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "pushNotificationTemplateResponse", location: .body(locationName: "PushNotificationTemplateResponse"))
        ]

        public let pushNotificationTemplateResponse: PushNotificationTemplateResponse

        public init(pushNotificationTemplateResponse: PushNotificationTemplateResponse) {
            self.pushNotificationTemplateResponse = pushNotificationTemplateResponse
        }

        private enum CodingKeys: String, CodingKey {
            case pushNotificationTemplateResponse = "PushNotificationTemplateResponse"
        }
    }

    public struct GetRecommenderConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderId", location: .uri(locationName: "recommender-id"))
        ]

        public let recommenderId: String

        public init(recommenderId: String) {
            self.recommenderId = recommenderId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRecommenderConfigurationResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "recommenderConfigurationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderConfigurationResponse", location: .body(locationName: "RecommenderConfigurationResponse"))
        ]

        public let recommenderConfigurationResponse: RecommenderConfigurationResponse

        public init(recommenderConfigurationResponse: RecommenderConfigurationResponse) {
            self.recommenderConfigurationResponse = recommenderConfigurationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case recommenderConfigurationResponse = "RecommenderConfigurationResponse"
        }
    }

    public struct GetRecommenderConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let pageSize: String?
        public let token: String?

        public init(pageSize: String? = nil, token: String? = nil) {
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRecommenderConfigurationsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "listRecommenderConfigurationsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "listRecommenderConfigurationsResponse", location: .body(locationName: "ListRecommenderConfigurationsResponse"))
        ]

        public let listRecommenderConfigurationsResponse: ListRecommenderConfigurationsResponse

        public init(listRecommenderConfigurationsResponse: ListRecommenderConfigurationsResponse) {
            self.listRecommenderConfigurationsResponse = listRecommenderConfigurationsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case listRecommenderConfigurationsResponse = "ListRecommenderConfigurationsResponse"
        }
    }

    public struct GetSegmentExportJobsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let segmentId: String
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, segmentId: String, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.segmentId = segmentId
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentExportJobsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "exportJobsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "exportJobsResponse", location: .body(locationName: "ExportJobsResponse"))
        ]

        public let exportJobsResponse: ExportJobsResponse

        public init(exportJobsResponse: ExportJobsResponse) {
            self.exportJobsResponse = exportJobsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case exportJobsResponse = "ExportJobsResponse"
        }
    }

    public struct GetSegmentImportJobsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let segmentId: String
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, segmentId: String, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.segmentId = segmentId
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentImportJobsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "importJobsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "importJobsResponse", location: .body(locationName: "ImportJobsResponse"))
        ]

        public let importJobsResponse: ImportJobsResponse

        public init(importJobsResponse: ImportJobsResponse) {
            self.importJobsResponse = importJobsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case importJobsResponse = "ImportJobsResponse"
        }
    }

    public struct GetSegmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id"))
        ]

        public let applicationId: String
        public let segmentId: String

        public init(applicationId: String, segmentId: String) {
            self.applicationId = applicationId
            self.segmentId = segmentId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentResponse", location: .body(locationName: "SegmentResponse"))
        ]

        public let segmentResponse: SegmentResponse

        public init(segmentResponse: SegmentResponse) {
            self.segmentResponse = segmentResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentResponse = "SegmentResponse"
        }
    }

    public struct GetSegmentVersionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id")),
            AWSMemberEncoding(label: "version", location: .uri(locationName: "version"))
        ]

        public let applicationId: String
        public let segmentId: String
        public let version: String

        public init(applicationId: String, segmentId: String, version: String) {
            self.applicationId = applicationId
            self.segmentId = segmentId
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentVersionResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentResponse", location: .body(locationName: "SegmentResponse"))
        ]

        public let segmentResponse: SegmentResponse

        public init(segmentResponse: SegmentResponse) {
            self.segmentResponse = segmentResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentResponse = "SegmentResponse"
        }
    }

    public struct GetSegmentVersionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let segmentId: String
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, segmentId: String, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.segmentId = segmentId
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentVersionsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentsResponse", location: .body(locationName: "SegmentsResponse"))
        ]

        public let segmentsResponse: SegmentsResponse

        public init(segmentsResponse: SegmentsResponse) {
            self.segmentsResponse = segmentsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentsResponse = "SegmentsResponse"
        }
    }

    public struct GetSegmentsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSegmentsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentsResponse", location: .body(locationName: "SegmentsResponse"))
        ]

        public let segmentsResponse: SegmentsResponse

        public init(segmentsResponse: SegmentsResponse) {
            self.segmentsResponse = segmentsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentsResponse = "SegmentsResponse"
        }
    }

    public struct GetSmsChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSmsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "sMSChannelResponse", location: .body(locationName: "SMSChannelResponse"))
        ]

        public let sMSChannelResponse: SMSChannelResponse

        public init(sMSChannelResponse: SMSChannelResponse) {
            self.sMSChannelResponse = sMSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case sMSChannelResponse = "SMSChannelResponse"
        }
    }

    public struct GetSmsTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSmsTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSTemplateResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "sMSTemplateResponse", location: .body(locationName: "SMSTemplateResponse"))
        ]

        public let sMSTemplateResponse: SMSTemplateResponse

        public init(sMSTemplateResponse: SMSTemplateResponse) {
            self.sMSTemplateResponse = sMSTemplateResponse
        }

        private enum CodingKeys: String, CodingKey {
            case sMSTemplateResponse = "SMSTemplateResponse"
        }
    }

    public struct GetUserEndpointsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "user-id"))
        ]

        public let applicationId: String
        public let userId: String

        public init(applicationId: String, userId: String) {
            self.applicationId = applicationId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetUserEndpointsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "endpointsResponse", location: .body(locationName: "EndpointsResponse"))
        ]

        public let endpointsResponse: EndpointsResponse

        public init(endpointsResponse: EndpointsResponse) {
            self.endpointsResponse = endpointsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case endpointsResponse = "EndpointsResponse"
        }
    }

    public struct GetVoiceChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let applicationId: String

        public init(applicationId: String) {
            self.applicationId = applicationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceChannelResponse", location: .body(locationName: "VoiceChannelResponse"))
        ]

        public let voiceChannelResponse: VoiceChannelResponse

        public init(voiceChannelResponse: VoiceChannelResponse) {
            self.voiceChannelResponse = voiceChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case voiceChannelResponse = "VoiceChannelResponse"
        }
    }

    public struct GetVoiceTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let templateName: String
        public let version: String?

        public init(templateName: String, version: String? = nil) {
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceTemplateResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceTemplateResponse", location: .body(locationName: "VoiceTemplateResponse"))
        ]

        public let voiceTemplateResponse: VoiceTemplateResponse

        public init(voiceTemplateResponse: VoiceTemplateResponse) {
            self.voiceTemplateResponse = voiceTemplateResponse
        }

        private enum CodingKeys: String, CodingKey {
            case voiceTemplateResponse = "VoiceTemplateResponse"
        }
    }

    public struct HoldoutActivity: AWSEncodableShape & AWSDecodableShape {
        /// The unique identifier for the next activity to perform, after performing the holdout activity.
        public let nextActivity: String?
        /// The percentage of participants who shouldn't continue the journey. To determine which participants are held out, Amazon Pinpoint applies a probability-based algorithm to the percentage that you specify. Therefore, the actual percentage of participants who are held out may not be equal to the percentage that you specify.
        public let percentage: Int

        public init(nextActivity: String? = nil, percentage: Int) {
            self.nextActivity = nextActivity
            self.percentage = percentage
        }

        private enum CodingKeys: String, CodingKey {
            case nextActivity = "NextActivity"
            case percentage = "Percentage"
        }
    }

    public struct ImportJobRequest: AWSEncodableShape {
        /// Specifies whether to create a segment that contains the endpoints, when the endpoint definitions are imported.
        public let defineSegment: Bool?
        /// (Deprecated) Your AWS account ID, which you assigned to an external ID key in an IAM trust policy. Amazon Pinpoint previously used this value to assume an IAM role when importing endpoint definitions, but we removed this requirement. We don't recommend use of external IDs for IAM roles that are assumed by Amazon Pinpoint.
        public let externalId: String?
        /// The format of the files that contain the endpoint definitions to import. Valid values are: CSV, for comma-separated values format; and, JSON, for newline-delimited JSON format. If the Amazon S3 location stores multiple files that use different formats, Amazon Pinpoint imports data only from the files that use the specified format.
        public let format: Format
        /// Specifies whether to register the endpoints with Amazon Pinpoint, when the endpoint definitions are imported.
        public let registerEndpoints: Bool?
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to access the Amazon S3 location to import endpoint definitions from.
        public let roleArn: String
        /// The URL of the Amazon Simple Storage Service (Amazon S3) bucket that contains the endpoint definitions to import. This location can be a folder or a single file. If the location is a folder, Amazon Pinpoint imports endpoint definitions from the files in this location, including any subfolders that the folder contains. The URL should be in the following format: s3://bucket-name/folder-name/file-name. The location can end with the key for an individual object or a prefix that qualifies multiple objects.
        public let s3Url: String
        /// The identifier for the segment to update or add the imported endpoint definitions to, if the import job is meant to update an existing segment.
        public let segmentId: String?
        /// A custom name for the segment that's created by the import job, if the value of the DefineSegment property is true.
        public let segmentName: String?

        public init(defineSegment: Bool? = nil, externalId: String? = nil, format: Format, registerEndpoints: Bool? = nil, roleArn: String, s3Url: String, segmentId: String? = nil, segmentName: String? = nil) {
            self.defineSegment = defineSegment
            self.externalId = externalId
            self.format = format
            self.registerEndpoints = registerEndpoints
            self.roleArn = roleArn
            self.s3Url = s3Url
            self.segmentId = segmentId
            self.segmentName = segmentName
        }

        private enum CodingKeys: String, CodingKey {
            case defineSegment = "DefineSegment"
            case externalId = "ExternalId"
            case format = "Format"
            case registerEndpoints = "RegisterEndpoints"
            case roleArn = "RoleArn"
            case s3Url = "S3Url"
            case segmentId = "SegmentId"
            case segmentName = "SegmentName"
        }
    }

    public struct ImportJobResource: AWSDecodableShape {
        /// Specifies whether the import job creates a segment that contains the endpoints, when the endpoint definitions are imported.
        public let defineSegment: Bool?
        /// (Deprecated) Your AWS account ID, which you assigned to an external ID key in an IAM trust policy. Amazon Pinpoint previously used this value to assume an IAM role when importing endpoint definitions, but we removed this requirement. We don't recommend use of external IDs for IAM roles that are assumed by Amazon Pinpoint.
        public let externalId: String?
        /// The format of the files that contain the endpoint definitions to import. Valid values are: CSV, for comma-separated values format; and, JSON, for newline-delimited JSON format. If the files are stored in an Amazon S3 location and that location contains multiple files that use different formats, Amazon Pinpoint imports data only from the files that use the specified format.
        public let format: Format
        /// Specifies whether the import job registers the endpoints with Amazon Pinpoint, when the endpoint definitions are imported.
        public let registerEndpoints: Bool?
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to access the Amazon S3 location to import endpoint definitions from.
        public let roleArn: String
        /// The URL of the Amazon Simple Storage Service (Amazon S3) bucket that contains the endpoint definitions to import. This location can be a folder or a single file. If the location is a folder, Amazon Pinpoint imports endpoint definitions from the files in this location, including any subfolders that the folder contains. The URL should be in the following format: s3://bucket-name/folder-name/file-name. The location can end with the key for an individual object or a prefix that qualifies multiple objects.
        public let s3Url: String
        /// The identifier for the segment that the import job updates or adds endpoint definitions to, if the import job updates an existing segment.
        public let segmentId: String?
        /// The custom name for the segment that's created by the import job, if the value of the DefineSegment property is true.
        public let segmentName: String?

        public init(defineSegment: Bool? = nil, externalId: String? = nil, format: Format, registerEndpoints: Bool? = nil, roleArn: String, s3Url: String, segmentId: String? = nil, segmentName: String? = nil) {
            self.defineSegment = defineSegment
            self.externalId = externalId
            self.format = format
            self.registerEndpoints = registerEndpoints
            self.roleArn = roleArn
            self.s3Url = s3Url
            self.segmentId = segmentId
            self.segmentName = segmentName
        }

        private enum CodingKeys: String, CodingKey {
            case defineSegment = "DefineSegment"
            case externalId = "ExternalId"
            case format = "Format"
            case registerEndpoints = "RegisterEndpoints"
            case roleArn = "RoleArn"
            case s3Url = "S3Url"
            case segmentId = "SegmentId"
            case segmentName = "SegmentName"
        }
    }

    public struct ImportJobResponse: AWSDecodableShape {
        /// The unique identifier for the application that's associated with the import job.
        public let applicationId: String
        /// The number of pieces that were processed successfully (completed) by the import job, as of the time of the request.
        public let completedPieces: Int?
        /// The date, in ISO 8601 format, when the import job was completed.
        public let completionDate: String?
        /// The date, in ISO 8601 format, when the import job was created.
        public let creationDate: String
        /// The resource settings that apply to the import job.
        public let definition: ImportJobResource
        /// The number of pieces that weren't processed successfully (failed) by the import job, as of the time of the request.
        public let failedPieces: Int?
        /// An array of entries, one for each of the first 100 entries that weren't processed successfully (failed) by the import job, if any.
        public let failures: [String]?
        /// The unique identifier for the import job.
        public let id: String
        /// The status of the import job. The job status is FAILED if Amazon Pinpoint wasn't able to process one or more pieces in the job.
        public let jobStatus: JobStatus
        /// The total number of endpoint definitions that weren't processed successfully (failed) by the import job, typically because an error, such as a syntax error, occurred.
        public let totalFailures: Int?
        /// The total number of pieces that must be processed to complete the import job. Each piece consists of an approximately equal portion of the endpoint definitions that are part of the import job.
        public let totalPieces: Int?
        /// The total number of endpoint definitions that were processed by the import job.
        public let totalProcessed: Int?
        /// The job type. This value is IMPORT for import jobs.
        public let type: String

        public init(applicationId: String, completedPieces: Int? = nil, completionDate: String? = nil, creationDate: String, definition: ImportJobResource, failedPieces: Int? = nil, failures: [String]? = nil, id: String, jobStatus: JobStatus, totalFailures: Int? = nil, totalPieces: Int? = nil, totalProcessed: Int? = nil, type: String) {
            self.applicationId = applicationId
            self.completedPieces = completedPieces
            self.completionDate = completionDate
            self.creationDate = creationDate
            self.definition = definition
            self.failedPieces = failedPieces
            self.failures = failures
            self.id = id
            self.jobStatus = jobStatus
            self.totalFailures = totalFailures
            self.totalPieces = totalPieces
            self.totalProcessed = totalProcessed
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case completedPieces = "CompletedPieces"
            case completionDate = "CompletionDate"
            case creationDate = "CreationDate"
            case definition = "Definition"
            case failedPieces = "FailedPieces"
            case failures = "Failures"
            case id = "Id"
            case jobStatus = "JobStatus"
            case totalFailures = "TotalFailures"
            case totalPieces = "TotalPieces"
            case totalProcessed = "TotalProcessed"
            case type = "Type"
        }
    }

    public struct ImportJobsResponse: AWSDecodableShape {
        /// An array of responses, one for each import job that's associated with the application (Import Jobs resource) or segment (Segment Import Jobs resource).
        public let item: [ImportJobResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [ImportJobResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct ItemResponse: AWSDecodableShape {
        /// The response that was received after the endpoint data was accepted.
        public let endpointItemResponse: EndpointItemResponse?
        /// A multipart response object that contains a key and a value for each event in the request. In each object, the event ID is the key and an EventItemResponse object is the value.
        public let eventsItemResponse: [String: EventItemResponse]?

        public init(endpointItemResponse: EndpointItemResponse? = nil, eventsItemResponse: [String: EventItemResponse]? = nil) {
            self.endpointItemResponse = endpointItemResponse
            self.eventsItemResponse = eventsItemResponse
        }

        private enum CodingKeys: String, CodingKey {
            case endpointItemResponse = "EndpointItemResponse"
            case eventsItemResponse = "EventsItemResponse"
        }
    }

    public struct JourneyCustomMessage: AWSEncodableShape & AWSDecodableShape {
        /// The message content that's passed to an AWS Lambda function or to a web hook.
        public let data: String?

        public init(data: String? = nil) {
            self.data = data
        }

        private enum CodingKeys: String, CodingKey {
            case data = "Data"
        }
    }

    public struct JourneyDateRangeKpiResponse: AWSDecodableShape {
        /// The unique identifier for the application that the metric applies to.
        public let applicationId: String
        /// The last date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var endTime: Date
        /// The unique identifier for the journey that the metric applies to.
        public let journeyId: String
        /// The name of the metric, also referred to as a key performance indicator (KPI), that the data was retrieved for. This value describes the associated metric and consists of two or more terms, which are comprised of lowercase alphanumeric characters, separated by a hyphen. For a list of possible values, see the Amazon Pinpoint Developer Guide.
        public let kpiName: String
        /// An array of objects that contains the results of the query. Each object contains the value for the metric and metadata about that value.
        public let kpiResult: BaseKpiResult
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null for the Journey Engagement Metrics resource because the resource returns all results in a single page.
        public let nextToken: String?
        /// The first date and time of the date range that was used to filter the query results, in extended ISO 8601 format. The date range is inclusive.
        @CustomCoding<ISO8601DateCoder>
        public var startTime: Date

        public init(applicationId: String, endTime: Date, journeyId: String, kpiName: String, kpiResult: BaseKpiResult, nextToken: String? = nil, startTime: Date) {
            self.applicationId = applicationId
            self.endTime = endTime
            self.journeyId = journeyId
            self.kpiName = kpiName
            self.kpiResult = kpiResult
            self.nextToken = nextToken
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case endTime = "EndTime"
            case journeyId = "JourneyId"
            case kpiName = "KpiName"
            case kpiResult = "KpiResult"
            case nextToken = "NextToken"
            case startTime = "StartTime"
        }
    }

    public struct JourneyEmailMessage: AWSEncodableShape & AWSDecodableShape {
        /// The verified email address to send the email message from. The default address is the FromAddress specified for the email channel for the application.
        public let fromAddress: String?

        public init(fromAddress: String? = nil) {
            self.fromAddress = fromAddress
        }

        private enum CodingKeys: String, CodingKey {
            case fromAddress = "FromAddress"
        }
    }

    public struct JourneyExecutionActivityMetricsResponse: AWSDecodableShape {
        /// The type of activity that the metric applies to. Possible values are: CONDITIONAL_SPLIT - For a yes/no split activity, which is an activity that sends participants down one of two paths in a journey. HOLDOUT - For a holdout activity, which is an activity that stops a journey for a specified percentage of participants. MESSAGE - For an email activity, which is an activity that sends an email message to participants. MULTI_CONDITIONAL_SPLIT - For a multivariate split activity, which is an activity that sends participants down one of as many as five paths in a journey. RANDOM_SPLIT - For a random split activity, which is an activity that sends specified percentages of participants down one of as many as five paths in a journey. WAIT - For a wait activity, which is an activity that waits for a certain amount of time or until a specific date and time before moving participants to the next activity in a journey.
        public let activityType: String
        /// The unique identifier for the application that the metric applies to.
        public let applicationId: String
        /// The unique identifier for the activity that the metric applies to.
        public let journeyActivityId: String
        /// The unique identifier for the journey that the metric applies to.
        public let journeyId: String
        /// The date and time, in ISO 8601 format, when Amazon Pinpoint last evaluated the execution status of the activity and updated the data for the metric.
        public let lastEvaluatedTime: String
        /// A JSON object that contains the results of the query. The results vary depending on the type of activity (ActivityType). For information about the structure and contents of the results, see the Amazon Pinpoint Developer Guide.
        public let metrics: [String: String]

        public init(activityType: String, applicationId: String, journeyActivityId: String, journeyId: String, lastEvaluatedTime: String, metrics: [String: String]) {
            self.activityType = activityType
            self.applicationId = applicationId
            self.journeyActivityId = journeyActivityId
            self.journeyId = journeyId
            self.lastEvaluatedTime = lastEvaluatedTime
            self.metrics = metrics
        }

        private enum CodingKeys: String, CodingKey {
            case activityType = "ActivityType"
            case applicationId = "ApplicationId"
            case journeyActivityId = "JourneyActivityId"
            case journeyId = "JourneyId"
            case lastEvaluatedTime = "LastEvaluatedTime"
            case metrics = "Metrics"
        }
    }

    public struct JourneyExecutionMetricsResponse: AWSDecodableShape {
        /// The unique identifier for the application that the metric applies to.
        public let applicationId: String
        /// The unique identifier for the journey that the metric applies to.
        public let journeyId: String
        /// The date and time, in ISO 8601 format, when Amazon Pinpoint last evaluated the journey and updated the data for the metric.
        public let lastEvaluatedTime: String
        /// A JSON object that contains the results of the query. For information about the structure and contents of the results, see the Amazon Pinpoint Developer Guide.
        public let metrics: [String: String]

        public init(applicationId: String, journeyId: String, lastEvaluatedTime: String, metrics: [String: String]) {
            self.applicationId = applicationId
            self.journeyId = journeyId
            self.lastEvaluatedTime = lastEvaluatedTime
            self.metrics = metrics
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case journeyId = "JourneyId"
            case lastEvaluatedTime = "LastEvaluatedTime"
            case metrics = "Metrics"
        }
    }

    public struct JourneyLimits: AWSEncodableShape & AWSDecodableShape {
        /// The maximum number of messages that the journey can send to a single participant during a 24-hour period. The maximum value is 100.
        public let dailyCap: Int?
        /// The maximum number of times that a participant can enter the journey. The maximum value is 100. To allow participants to enter the journey an unlimited number of times, set this value to 0.
        public let endpointReentryCap: Int?
        /// The maximum number of messages that the journey can send each second.
        public let messagesPerSecond: Int?

        public init(dailyCap: Int? = nil, endpointReentryCap: Int? = nil, messagesPerSecond: Int? = nil) {
            self.dailyCap = dailyCap
            self.endpointReentryCap = endpointReentryCap
            self.messagesPerSecond = messagesPerSecond
        }

        private enum CodingKeys: String, CodingKey {
            case dailyCap = "DailyCap"
            case endpointReentryCap = "EndpointReentryCap"
            case messagesPerSecond = "MessagesPerSecond"
        }
    }

    public struct JourneyPushMessage: AWSEncodableShape & AWSDecodableShape {
        /// The number of seconds that the push notification service should keep the message, if the service is unable to deliver the notification the first time. This value is converted to an expiration value when it's sent to a push-notification service. If this value is 0, the service treats the notification as if it expires immediately and the service doesn't store or try to deliver the notification again. This value doesn't apply to messages that are sent through the Amazon Device Messaging (ADM) service.
        public let timeToLive: String?

        public init(timeToLive: String? = nil) {
            self.timeToLive = timeToLive
        }

        private enum CodingKeys: String, CodingKey {
            case timeToLive = "TimeToLive"
        }
    }

    public struct JourneyResponse: AWSDecodableShape {
        /// A map that contains a set of Activity objects, one object for each activity in the journey. For each Activity object, the key is the unique identifier (string) for an activity and the value is the settings for the activity.
        public let activities: [String: Activity]?
        /// The unique identifier for the application that the journey applies to.
        public let applicationId: String
        /// The date, in ISO 8601 format, when the journey was created.
        public let creationDate: String?
        /// The unique identifier for the journey.
        public let id: String
        /// The date, in ISO 8601 format, when the journey was last modified.
        public let lastModifiedDate: String?
        /// The messaging and entry limits for the journey.
        public let limits: JourneyLimits?
        /// Specifies whether the journey's scheduled start and end times use each participant's local time. If this value is true, the schedule uses each participant's local time.
        public let localTime: Bool?
        /// The name of the journey.
        public let name: String
        /// The quiet time settings for the journey. Quiet time is a specific time range when a journey doesn't send messages to participants, if all the following conditions are met: The EndpointDemographic.Timezone property of the endpoint for the participant is set to a valid value. The current time in the participant's time zone is later than or equal to the time specified by the QuietTime.Start property for the journey. The current time in the participant's time zone is earlier than or equal to the time specified by the QuietTime.End property for the journey. If any of the preceding conditions isn't met, the participant will receive messages from the journey, even if quiet time is enabled.
        public let quietTime: QuietTime?
        /// The frequency with which Amazon Pinpoint evaluates segment and event data for the journey, as a duration in ISO 8601 format.
        public let refreshFrequency: String?
        /// The schedule settings for the journey.
        public let schedule: JourneySchedule?
        /// The unique identifier for the first activity in the journey.
        public let startActivity: String?
        /// The segment that defines which users are participants in the journey.
        public let startCondition: StartCondition?
        /// The current status of the journey. Possible values are: DRAFT - The journey is being developed and hasn't been published yet. ACTIVE - The journey has been developed and published. Depending on the journey's schedule, the journey may currently be running or scheduled to start running at a later time. If a journey's status is ACTIVE, you can't add, change, or remove activities from it. COMPLETED - The journey has been published and has finished running. All participants have entered the journey and no participants are waiting to complete the journey or any activities in the journey. CANCELLED - The journey has been stopped. If a journey's status is CANCELLED, you can't add, change, or remove activities or segment settings from the journey. CLOSED - The journey has been published and has started running. It may have also passed its scheduled end time, or passed its scheduled start time and a refresh frequency hasn't been specified for it. If a journey's status is CLOSED, you can't add participants to it, and no existing participants can enter the journey for the first time. However, any existing participants who are currently waiting to start an activity may continue the journey.
        public let state: State?
        /// This object is not used or supported.
        public let tags: [String: String]?

        public init(activities: [String: Activity]? = nil, applicationId: String, creationDate: String? = nil, id: String, lastModifiedDate: String? = nil, limits: JourneyLimits? = nil, localTime: Bool? = nil, name: String, quietTime: QuietTime? = nil, refreshFrequency: String? = nil, schedule: JourneySchedule? = nil, startActivity: String? = nil, startCondition: StartCondition? = nil, state: State? = nil, tags: [String: String]? = nil) {
            self.activities = activities
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.id = id
            self.lastModifiedDate = lastModifiedDate
            self.limits = limits
            self.localTime = localTime
            self.name = name
            self.quietTime = quietTime
            self.refreshFrequency = refreshFrequency
            self.schedule = schedule
            self.startActivity = startActivity
            self.startCondition = startCondition
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case activities = "Activities"
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case id = "Id"
            case lastModifiedDate = "LastModifiedDate"
            case limits = "Limits"
            case localTime = "LocalTime"
            case name = "Name"
            case quietTime = "QuietTime"
            case refreshFrequency = "RefreshFrequency"
            case schedule = "Schedule"
            case startActivity = "StartActivity"
            case startCondition = "StartCondition"
            case state = "State"
            case tags
        }
    }

    public struct JourneySMSMessage: AWSEncodableShape & AWSDecodableShape {
        /// The entity ID or Principal Entity (PE) id received from the regulatory body for sending SMS in your country.
        public let entityId: String?
        /// The SMS message type. Valid values are TRANSACTIONAL (for messages that are critical or time-sensitive, such as a one-time passwords) and PROMOTIONAL (for messsages that aren't critical or time-sensitive, such as marketing messages).
        public let messageType: MessageType?
        /// The long code to send the SMS message from. This value should be one of the dedicated long codes that's assigned to your AWS account. Although it isn't required, we recommend that you specify the long code using an E.164 format to ensure prompt and accurate delivery of the message. For example, +12065550100.
        public let originationNumber: String?
        /// The sender ID to display as the sender of the message on a recipient's device. Support for sender IDs varies by country or region. For more information, see Supported Countries and Regions in the Amazon Pinpoint User Guide.
        public let senderId: String?
        /// The template ID received from the regulatory body for sending SMS in your country.
        public let templateId: String?

        public init(entityId: String? = nil, messageType: MessageType? = nil, originationNumber: String? = nil, senderId: String? = nil, templateId: String? = nil) {
            self.entityId = entityId
            self.messageType = messageType
            self.originationNumber = originationNumber
            self.senderId = senderId
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case entityId = "EntityId"
            case messageType = "MessageType"
            case originationNumber = "OriginationNumber"
            case senderId = "SenderId"
            case templateId = "TemplateId"
        }
    }

    public struct JourneySchedule: AWSEncodableShape & AWSDecodableShape {
        /// The scheduled time, in ISO 8601 format, when the journey ended or will end.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        /// The scheduled time, in ISO 8601 format, when the journey began or will begin.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?
        /// The starting UTC offset for the journey schedule, if the value of the journey's LocalTime property is true. Valid values are: UTC,
        ///                   UTC+01, UTC+02, UTC+03, UTC+03:30, UTC+04, UTC+04:30, UTC+05, UTC+05:30,
        ///                   UTC+05:45, UTC+06, UTC+06:30, UTC+07, UTC+08, UTC+08:45, UTC+09, UTC+09:30,
        ///                   UTC+10, UTC+10:30, UTC+11, UTC+12, UTC+12:45, UTC+13, UTC+13:45, UTC-02,
        ///                   UTC-02:30, UTC-03, UTC-03:30, UTC-04, UTC-05, UTC-06, UTC-07, UTC-08, UTC-09,
        ///                   UTC-09:30, UTC-10, and UTC-11.
        public let timezone: String?

        public init(endTime: Date? = nil, startTime: Date? = nil, timezone: String? = nil) {
            self.endTime = endTime
            self.startTime = startTime
            self.timezone = timezone
        }

        private enum CodingKeys: String, CodingKey {
            case endTime = "EndTime"
            case startTime = "StartTime"
            case timezone = "Timezone"
        }
    }

    public struct JourneyStateRequest: AWSEncodableShape {
        /// The status of the journey. Currently, the only supported value is CANCELLED. If you cancel a journey, Amazon Pinpoint continues to perform activities that are currently in progress, until those activities are complete. Amazon Pinpoint also continues to collect and aggregate analytics data for those activities, until they are complete, and any activities that were complete when you cancelled the journey. After you cancel a journey, you can't add, change, or remove any activities from the journey. In addition, Amazon Pinpoint stops evaluating the journey and doesn't perform any activities that haven't started.
        public let state: State?

        public init(state: State? = nil) {
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case state = "State"
        }
    }

    public struct JourneysResponse: AWSDecodableShape {
        /// An array of responses, one for each journey that's associated with the application.
        public let item: [JourneyResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [JourneyResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct ListJourneysRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "token", location: .querystring(locationName: "token"))
        ]

        public let applicationId: String
        public let pageSize: String?
        public let token: String?

        public init(applicationId: String, pageSize: String? = nil, token: String? = nil) {
            self.applicationId = applicationId
            self.pageSize = pageSize
            self.token = token
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListJourneysResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeysResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeysResponse", location: .body(locationName: "JourneysResponse"))
        ]

        public let journeysResponse: JourneysResponse

        public init(journeysResponse: JourneysResponse) {
            self.journeysResponse = journeysResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeysResponse = "JourneysResponse"
        }
    }

    public struct ListRecommenderConfigurationsResponse: AWSDecodableShape {
        /// An array of responses, one for each recommender model configuration that's associated with your Amazon Pinpoint account.
        public let item: [RecommenderConfigurationResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [RecommenderConfigurationResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn"))
        ]

        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "tagsModel"
        public static var _encoding = [
            AWSMemberEncoding(label: "tagsModel", location: .body(locationName: "TagsModel"))
        ]

        public let tagsModel: TagsModel

        public init(tagsModel: TagsModel) {
            self.tagsModel = tagsModel
        }

        private enum CodingKeys: String, CodingKey {
            case tagsModel = "TagsModel"
        }
    }

    public struct ListTemplateVersionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "templateType", location: .uri(locationName: "template-type"))
        ]

        public let nextToken: String?
        public let pageSize: String?
        public let templateName: String
        public let templateType: String

        public init(nextToken: String? = nil, pageSize: String? = nil, templateName: String, templateType: String) {
            self.nextToken = nextToken
            self.pageSize = pageSize
            self.templateName = templateName
            self.templateType = templateType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTemplateVersionsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "templateVersionsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "templateVersionsResponse", location: .body(locationName: "TemplateVersionsResponse"))
        ]

        public let templateVersionsResponse: TemplateVersionsResponse

        public init(templateVersionsResponse: TemplateVersionsResponse) {
            self.templateVersionsResponse = templateVersionsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case templateVersionsResponse = "TemplateVersionsResponse"
        }
    }

    public struct ListTemplatesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "pageSize", location: .querystring(locationName: "page-size")),
            AWSMemberEncoding(label: "prefix", location: .querystring(locationName: "prefix")),
            AWSMemberEncoding(label: "templateType", location: .querystring(locationName: "template-type"))
        ]

        public let nextToken: String?
        public let pageSize: String?
        public let prefix: String?
        public let templateType: String?

        public init(nextToken: String? = nil, pageSize: String? = nil, prefix: String? = nil, templateType: String? = nil) {
            self.nextToken = nextToken
            self.pageSize = pageSize
            self.prefix = prefix
            self.templateType = templateType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTemplatesResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "templatesResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "templatesResponse", location: .body(locationName: "TemplatesResponse"))
        ]

        public let templatesResponse: TemplatesResponse

        public init(templatesResponse: TemplatesResponse) {
            self.templatesResponse = templatesResponse
        }

        private enum CodingKeys: String, CodingKey {
            case templatesResponse = "TemplatesResponse"
        }
    }

    public struct Message: AWSEncodableShape & AWSDecodableShape {
        /// The action to occur if a recipient taps the push notification. Valid values are: OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default action. DEEP_LINK - Your app opens and displays a designated user interface in the app. This setting uses the deep-linking features of iOS and Android. URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you specify.
        public let action: Action?
        /// The body of the notification message. The maximum number of characters is 200.
        public let body: String?
        /// The URL of the image to display as the push-notification icon, such as the icon for the app.
        public let imageIconUrl: String?
        /// The URL of the image to display as the small, push-notification icon, such as a small version of the icon for the app.
        public let imageSmallIconUrl: String?
        /// The URL of an image to display in the push notification.
        public let imageUrl: String?
        /// The JSON payload to use for a silent push notification.
        public let jsonBody: String?
        /// The URL of the image or video to display in the push notification.
        public let mediaUrl: String?
        /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message.
        public let rawContent: String?
        /// Specifies whether the notification is a silent push notification, which is a push notification that doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating an app's configuration, displaying messages in an in-app message center, or supporting phone home functionality.
        public let silentPush: Bool?
        /// The number of seconds that the push-notification service should keep the message, if the service is unable to deliver the notification the first time. This value is converted to an expiration value when it's sent to a push-notification service. If this value is 0, the service treats the notification as if it expires immediately and the service doesn't store or try to deliver the notification again. This value doesn't apply to messages that are sent through the Amazon Device Messaging (ADM) service.
        public let timeToLive: Int?
        /// The title to display above the notification message on a recipient's device.
        public let title: String?
        /// The URL to open in a recipient's default mobile browser, if a recipient taps the push notification and the value of the Action property is URL.
        public let url: String?

        public init(action: Action? = nil, body: String? = nil, imageIconUrl: String? = nil, imageSmallIconUrl: String? = nil, imageUrl: String? = nil, jsonBody: String? = nil, mediaUrl: String? = nil, rawContent: String? = nil, silentPush: Bool? = nil, timeToLive: Int? = nil, title: String? = nil, url: String? = nil) {
            self.action = action
            self.body = body
            self.imageIconUrl = imageIconUrl
            self.imageSmallIconUrl = imageSmallIconUrl
            self.imageUrl = imageUrl
            self.jsonBody = jsonBody
            self.mediaUrl = mediaUrl
            self.rawContent = rawContent
            self.silentPush = silentPush
            self.timeToLive = timeToLive
            self.title = title
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case body = "Body"
            case imageIconUrl = "ImageIconUrl"
            case imageSmallIconUrl = "ImageSmallIconUrl"
            case imageUrl = "ImageUrl"
            case jsonBody = "JsonBody"
            case mediaUrl = "MediaUrl"
            case rawContent = "RawContent"
            case silentPush = "SilentPush"
            case timeToLive = "TimeToLive"
            case title = "Title"
            case url = "Url"
        }
    }

    public struct MessageBody: AWSDecodableShape {
        /// The message that's returned from the API.
        public let message: String?
        /// The unique identifier for the request or response.
        public let requestID: String?

        public init(message: String? = nil, requestID: String? = nil) {
            self.message = message
            self.requestID = requestID
        }

        private enum CodingKeys: String, CodingKey {
            case message = "Message"
            case requestID = "RequestID"
        }
    }

    public struct MessageConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The message that the campaign sends through the ADM (Amazon Device Messaging) channel. If specified, this message overrides the default message.
        public let aDMMessage: Message?
        /// The message that the campaign sends through the APNs (Apple Push Notification service) channel. If specified, this message overrides the default message.
        public let aPNSMessage: Message?
        /// The message that the campaign sends through the Baidu (Baidu Cloud Push) channel. If specified, this message overrides the default message.
        public let baiduMessage: Message?
        /// The message that the campaign sends through a custom channel, as specified by the delivery configuration (CustomDeliveryConfiguration) settings for the campaign. If specified, this message overrides the default message.
        public let customMessage: CampaignCustomMessage?
        /// The default message that the campaign sends through all the channels that are configured for the campaign.
        public let defaultMessage: Message?
        /// The message that the campaign sends through the email channel. If specified, this message overrides the default message.
        public let emailMessage: CampaignEmailMessage?
        /// The message that the campaign sends through the GCM channel, which enables Amazon Pinpoint to send push notifications through the Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), service. If specified, this message overrides the default message.
        public let gCMMessage: Message?
        /// The message that the campaign sends through the SMS channel. If specified, this message overrides the default message.
        public let sMSMessage: CampaignSmsMessage?

        public init(aDMMessage: Message? = nil, aPNSMessage: Message? = nil, baiduMessage: Message? = nil, customMessage: CampaignCustomMessage? = nil, defaultMessage: Message? = nil, emailMessage: CampaignEmailMessage? = nil, gCMMessage: Message? = nil, sMSMessage: CampaignSmsMessage? = nil) {
            self.aDMMessage = aDMMessage
            self.aPNSMessage = aPNSMessage
            self.baiduMessage = baiduMessage
            self.customMessage = customMessage
            self.defaultMessage = defaultMessage
            self.emailMessage = emailMessage
            self.gCMMessage = gCMMessage
            self.sMSMessage = sMSMessage
        }

        private enum CodingKeys: String, CodingKey {
            case aDMMessage = "ADMMessage"
            case aPNSMessage = "APNSMessage"
            case baiduMessage = "BaiduMessage"
            case customMessage = "CustomMessage"
            case defaultMessage = "DefaultMessage"
            case emailMessage = "EmailMessage"
            case gCMMessage = "GCMMessage"
            case sMSMessage = "SMSMessage"
        }
    }

    public struct MessageRequest: AWSEncodableShape {
        /// A map of key-value pairs, where each key is an address and each value is an AddressConfiguration object. An address can be a push notification token, a phone number, or an email address. You can use an AddressConfiguration object to tailor the message for an address by specifying settings such as content overrides and message variables.
        public let addresses: [String: AddressConfiguration]?
        /// A map of custom attributes to attach to the message. For a push notification, this payload is added to the data.pinpoint object. For an email or text message, this payload is added to email/SMS delivery receipt event attributes.
        public let context: [String: String]?
        /// A map of key-value pairs, where each key is an endpoint ID and each value is an EndpointSendConfiguration object. You can use an EndpointSendConfiguration object to tailor the message for an endpoint by specifying settings such as content overrides and message variables.
        public let endpoints: [String: EndpointSendConfiguration]?
        /// The settings and content for the default message and any default messages that you defined for specific channels.
        public let messageConfiguration: DirectMessageConfiguration
        /// The message template to use for the message.
        public let templateConfiguration: TemplateConfiguration?
        /// The unique identifier for tracing the message. This identifier is visible to message recipients.
        public let traceId: String?

        public init(addresses: [String: AddressConfiguration]? = nil, context: [String: String]? = nil, endpoints: [String: EndpointSendConfiguration]? = nil, messageConfiguration: DirectMessageConfiguration, templateConfiguration: TemplateConfiguration? = nil, traceId: String? = nil) {
            self.addresses = addresses
            self.context = context
            self.endpoints = endpoints
            self.messageConfiguration = messageConfiguration
            self.templateConfiguration = templateConfiguration
            self.traceId = traceId
        }

        private enum CodingKeys: String, CodingKey {
            case addresses = "Addresses"
            case context = "Context"
            case endpoints = "Endpoints"
            case messageConfiguration = "MessageConfiguration"
            case templateConfiguration = "TemplateConfiguration"
            case traceId = "TraceId"
        }
    }

    public struct MessageResponse: AWSDecodableShape {
        /// The unique identifier for the application that was used to send the message.
        public let applicationId: String
        /// A map that contains a multipart response for each address that the message was sent to. In the map, the endpoint ID is the key and the result is the value.
        public let endpointResult: [String: EndpointMessageResult]?
        /// The identifier for the original request that the message was delivered for.
        public let requestId: String?
        /// A map that contains a multipart response for each address (email address, phone number, or push notification token) that the message was sent to. In the map, the address is the key and the result is the value.
        public let result: [String: MessageResult]?

        public init(applicationId: String, endpointResult: [String: EndpointMessageResult]? = nil, requestId: String? = nil, result: [String: MessageResult]? = nil) {
            self.applicationId = applicationId
            self.endpointResult = endpointResult
            self.requestId = requestId
            self.result = result
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case endpointResult = "EndpointResult"
            case requestId = "RequestId"
            case result = "Result"
        }
    }

    public struct MessageResult: AWSDecodableShape {
        /// The delivery status of the message. Possible values are:  DUPLICATE - The endpoint address is a duplicate of another endpoint address. Amazon Pinpoint won't attempt to send the message again.   OPT_OUT - The user who's associated with the endpoint address has opted out of receiving messages from you. Amazon Pinpoint won't attempt to send the message again. PERMANENT_FAILURE - An error occurred when delivering the message to the endpoint address. Amazon Pinpoint won't attempt to send the message again.   SUCCESSFUL - The message was successfully delivered to the endpoint address. TEMPORARY_FAILURE - A temporary error occurred. Amazon Pinpoint won't attempt to send the message again. THROTTLED - Amazon Pinpoint throttled the operation to send the message to the endpoint address. TIMEOUT - The message couldn't be sent within the timeout period. UNKNOWN_FAILURE - An unknown error occurred.
        public let deliveryStatus: DeliveryStatus
        /// The unique identifier for the message that was sent.
        public let messageId: String?
        /// The downstream service status code for delivering the message.
        public let statusCode: Int
        /// The status message for delivering the message.
        public let statusMessage: String?
        /// For push notifications that are sent through the GCM channel, specifies whether the endpoint's device registration token was updated as part of delivering the message.
        public let updatedToken: String?

        public init(deliveryStatus: DeliveryStatus, messageId: String? = nil, statusCode: Int, statusMessage: String? = nil, updatedToken: String? = nil) {
            self.deliveryStatus = deliveryStatus
            self.messageId = messageId
            self.statusCode = statusCode
            self.statusMessage = statusMessage
            self.updatedToken = updatedToken
        }

        private enum CodingKeys: String, CodingKey {
            case deliveryStatus = "DeliveryStatus"
            case messageId = "MessageId"
            case statusCode = "StatusCode"
            case statusMessage = "StatusMessage"
            case updatedToken = "UpdatedToken"
        }
    }

    public struct MetricDimension: AWSEncodableShape & AWSDecodableShape {
        /// The operator to use when comparing metric values. Valid values are: GREATER_THAN, LESS_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, and EQUAL.
        public let comparisonOperator: String
        /// The value to compare.
        public let value: Double

        public init(comparisonOperator: String, value: Double) {
            self.comparisonOperator = comparisonOperator
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case comparisonOperator = "ComparisonOperator"
            case value = "Value"
        }
    }

    public struct MultiConditionalBranch: AWSEncodableShape & AWSDecodableShape {
        /// The condition to evaluate for the activity path.
        public let condition: SimpleCondition?
        /// The unique identifier for the next activity to perform, after completing the activity for the path.
        public let nextActivity: String?

        public init(condition: SimpleCondition? = nil, nextActivity: String? = nil) {
            self.condition = condition
            self.nextActivity = nextActivity
        }

        private enum CodingKeys: String, CodingKey {
            case condition = "Condition"
            case nextActivity = "NextActivity"
        }
    }

    public struct MultiConditionalSplitActivity: AWSEncodableShape & AWSDecodableShape {
        /// The paths for the activity, including the conditions for entering each path and the activity to perform for each path.
        public let branches: [MultiConditionalBranch]?
        /// The unique identifier for the activity to perform for participants who don't meet any of the conditions specified for other paths in the activity.
        public let defaultActivity: String?
        /// The amount of time to wait or the date and time when Amazon Pinpoint determines whether the conditions are met.
        public let evaluationWaitTime: WaitTime?

        public init(branches: [MultiConditionalBranch]? = nil, defaultActivity: String? = nil, evaluationWaitTime: WaitTime? = nil) {
            self.branches = branches
            self.defaultActivity = defaultActivity
            self.evaluationWaitTime = evaluationWaitTime
        }

        private enum CodingKeys: String, CodingKey {
            case branches = "Branches"
            case defaultActivity = "DefaultActivity"
            case evaluationWaitTime = "EvaluationWaitTime"
        }
    }

    public struct NumberValidateRequest: AWSEncodableShape {
        /// The two-character code, in ISO 3166-1 alpha-2 format, for the country or region where the phone number was originally registered.
        public let isoCountryCode: String?
        /// The phone number to retrieve information about. The phone number that you provide should include a valid numeric country code. Otherwise, the operation might result in an error.
        public let phoneNumber: String?

        public init(isoCountryCode: String? = nil, phoneNumber: String? = nil) {
            self.isoCountryCode = isoCountryCode
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case isoCountryCode = "IsoCountryCode"
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct NumberValidateResponse: AWSDecodableShape {
        /// The carrier or service provider that the phone number is currently registered with. In some countries and regions, this value may be the carrier or service provider that the phone number was originally registered with.
        public let carrier: String?
        /// The name of the city where the phone number was originally registered.
        public let city: String?
        /// The cleansed phone number, in E.164 format, for the location where the phone number was originally registered.
        public let cleansedPhoneNumberE164: String?
        /// The cleansed phone number, in the format for the location where the phone number was originally registered.
        public let cleansedPhoneNumberNational: String?
        /// The name of the country or region where the phone number was originally registered.
        public let country: String?
        /// The two-character code, in ISO 3166-1 alpha-2 format, for the country or region where the phone number was originally registered.
        public let countryCodeIso2: String?
        /// The numeric code for the country or region where the phone number was originally registered.
        public let countryCodeNumeric: String?
        /// The name of the county where the phone number was originally registered.
        public let county: String?
        /// The two-character code, in ISO 3166-1 alpha-2 format, that was sent in the request body.
        public let originalCountryCodeIso2: String?
        /// The phone number that was sent in the request body.
        public let originalPhoneNumber: String?
        /// The description of the phone type. Valid values are: MOBILE, LANDLINE, VOIP,
        ///                   INVALID, PREPAID, and OTHER.
        public let phoneType: String?
        /// The phone type, represented by an integer. Valid values are: 0 (mobile), 1 (landline), 2 (VoIP), 3 (invalid), 4 (other), and 5 (prepaid).
        public let phoneTypeCode: Int?
        /// The time zone for the location where the phone number was originally registered.
        public let timezone: String?
        /// The postal or ZIP code for the location where the phone number was originally registered.
        public let zipCode: String?

        public init(carrier: String? = nil, city: String? = nil, cleansedPhoneNumberE164: String? = nil, cleansedPhoneNumberNational: String? = nil, country: String? = nil, countryCodeIso2: String? = nil, countryCodeNumeric: String? = nil, county: String? = nil, originalCountryCodeIso2: String? = nil, originalPhoneNumber: String? = nil, phoneType: String? = nil, phoneTypeCode: Int? = nil, timezone: String? = nil, zipCode: String? = nil) {
            self.carrier = carrier
            self.city = city
            self.cleansedPhoneNumberE164 = cleansedPhoneNumberE164
            self.cleansedPhoneNumberNational = cleansedPhoneNumberNational
            self.country = country
            self.countryCodeIso2 = countryCodeIso2
            self.countryCodeNumeric = countryCodeNumeric
            self.county = county
            self.originalCountryCodeIso2 = originalCountryCodeIso2
            self.originalPhoneNumber = originalPhoneNumber
            self.phoneType = phoneType
            self.phoneTypeCode = phoneTypeCode
            self.timezone = timezone
            self.zipCode = zipCode
        }

        private enum CodingKeys: String, CodingKey {
            case carrier = "Carrier"
            case city = "City"
            case cleansedPhoneNumberE164 = "CleansedPhoneNumberE164"
            case cleansedPhoneNumberNational = "CleansedPhoneNumberNational"
            case country = "Country"
            case countryCodeIso2 = "CountryCodeIso2"
            case countryCodeNumeric = "CountryCodeNumeric"
            case county = "County"
            case originalCountryCodeIso2 = "OriginalCountryCodeIso2"
            case originalPhoneNumber = "OriginalPhoneNumber"
            case phoneType = "PhoneType"
            case phoneTypeCode = "PhoneTypeCode"
            case timezone = "Timezone"
            case zipCode = "ZipCode"
        }
    }

    public struct PhoneNumberValidateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "numberValidateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "numberValidateRequest", location: .body(locationName: "NumberValidateRequest"))
        ]

        public let numberValidateRequest: NumberValidateRequest

        public init(numberValidateRequest: NumberValidateRequest) {
            self.numberValidateRequest = numberValidateRequest
        }

        private enum CodingKeys: String, CodingKey {
            case numberValidateRequest = "NumberValidateRequest"
        }
    }

    public struct PhoneNumberValidateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "numberValidateResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "numberValidateResponse", location: .body(locationName: "NumberValidateResponse"))
        ]

        public let numberValidateResponse: NumberValidateResponse

        public init(numberValidateResponse: NumberValidateResponse) {
            self.numberValidateResponse = numberValidateResponse
        }

        private enum CodingKeys: String, CodingKey {
            case numberValidateResponse = "NumberValidateResponse"
        }
    }

    public struct PublicEndpoint: AWSEncodableShape {
        /// The unique identifier for the recipient, such as a device token, email address, or mobile phone number.
        public let address: String?
        /// One or more custom attributes that describe the endpoint by associating a name with an array of values. You can use these attributes as filter criteria when you create segments.
        public let attributes: [String: [String]]?
        /// The channel that's used when sending messages or push notifications to the endpoint.
        public let channelType: ChannelType?
        /// The demographic information for the endpoint, such as the time zone and platform.
        public let demographic: EndpointDemographic?
        /// The date and time, in ISO 8601 format, when the endpoint was last updated.
        public let effectiveDate: String?
        /// Specifies whether to send messages or push notifications to the endpoint. Valid values are: ACTIVE, messages are sent to the endpoint; and, INACTIVE, messages aren’t sent to the endpoint. Amazon Pinpoint automatically sets this value to ACTIVE when you create an endpoint or update an existing endpoint. Amazon Pinpoint automatically sets this value to INACTIVE if you update another endpoint that has the same address specified by the Address property.
        public let endpointStatus: String?
        /// The geographic information for the endpoint.
        public let location: EndpointLocation?
        /// One or more custom metrics that your app reports to Amazon Pinpoint for the endpoint.
        public let metrics: [String: Double]?
        /// Specifies whether the user who's associated with the endpoint has opted out of receiving messages and push notifications from you. Possible values are: ALL, the user has opted out and doesn't want to receive any messages or push notifications; and, NONE, the user hasn't opted out and wants to receive all messages and push notifications.
        public let optOut: String?
        /// A unique identifier that's generated each time the endpoint is updated.
        public let requestId: String?
        /// One or more custom user attributes that your app reports to Amazon Pinpoint for the user who's associated with the endpoint.
        public let user: EndpointUser?

        public init(address: String? = nil, attributes: [String: [String]]? = nil, channelType: ChannelType? = nil, demographic: EndpointDemographic? = nil, effectiveDate: String? = nil, endpointStatus: String? = nil, location: EndpointLocation? = nil, metrics: [String: Double]? = nil, optOut: String? = nil, requestId: String? = nil, user: EndpointUser? = nil) {
            self.address = address
            self.attributes = attributes
            self.channelType = channelType
            self.demographic = demographic
            self.effectiveDate = effectiveDate
            self.endpointStatus = endpointStatus
            self.location = location
            self.metrics = metrics
            self.optOut = optOut
            self.requestId = requestId
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case attributes = "Attributes"
            case channelType = "ChannelType"
            case demographic = "Demographic"
            case effectiveDate = "EffectiveDate"
            case endpointStatus = "EndpointStatus"
            case location = "Location"
            case metrics = "Metrics"
            case optOut = "OptOut"
            case requestId = "RequestId"
            case user = "User"
        }
    }

    public struct PushMessageActivity: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the time to live (TTL) value for push notifications that are sent to participants in a journey.
        public let messageConfig: JourneyPushMessage?
        /// The unique identifier for the next activity to perform, after the message is sent.
        public let nextActivity: String?
        /// The name of the push notification template to use for the message. If specified, this value must match the name of an existing message template.
        public let templateName: String?
        /// The unique identifier for the version of the push notification template to use for the message. If specified, this value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource. If you don't specify a value for this property, Amazon Pinpoint uses the active version of the template. The active version is typically the version of a template that's been most recently reviewed and approved for use, depending on your workflow. It isn't necessarily the latest version of a template.
        public let templateVersion: String?

        public init(messageConfig: JourneyPushMessage? = nil, nextActivity: String? = nil, templateName: String? = nil, templateVersion: String? = nil) {
            self.messageConfig = messageConfig
            self.nextActivity = nextActivity
            self.templateName = templateName
            self.templateVersion = templateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case messageConfig = "MessageConfig"
            case nextActivity = "NextActivity"
            case templateName = "TemplateName"
            case templateVersion = "TemplateVersion"
        }
    }

    public struct PushNotificationTemplateRequest: AWSEncodableShape {
        /// The message template to use for the ADM (Amazon Device Messaging) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let adm: AndroidPushNotificationTemplate?
        /// The message template to use for the APNs (Apple Push Notification service) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let apns: APNSPushNotificationTemplate?
        /// The message template to use for the Baidu (Baidu Cloud Push) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let baidu: AndroidPushNotificationTemplate?
        /// The default message template to use for push notification channels.
        public let `default`: DefaultPushNotificationTemplate?
        /// A JSON object that specifies the default values to use for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable. When you create a message that's based on the template, you can override these defaults with message-specific and address-specific variables and values.
        public let defaultSubstitutions: String?
        /// The message template to use for the GCM channel, which is used to send notifications through the Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), service. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let gcm: AndroidPushNotificationTemplate?
        /// The unique identifier for the recommender model to use for the message template. Amazon Pinpoint uses this value to determine how to retrieve and process data from a recommender model when it sends messages that use the template, if the template contains message variables for recommendation data.
        public let recommenderId: String?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// A custom description of the message template.
        public let templateDescription: String?

        public init(adm: AndroidPushNotificationTemplate? = nil, apns: APNSPushNotificationTemplate? = nil, baidu: AndroidPushNotificationTemplate? = nil, default: DefaultPushNotificationTemplate? = nil, defaultSubstitutions: String? = nil, gcm: AndroidPushNotificationTemplate? = nil, recommenderId: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil) {
            self.adm = adm
            self.apns = apns
            self.baidu = baidu
            self.`default` = `default`
            self.defaultSubstitutions = defaultSubstitutions
            self.gcm = gcm
            self.recommenderId = recommenderId
            self.tags = tags
            self.templateDescription = templateDescription
        }

        private enum CodingKeys: String, CodingKey {
            case adm = "ADM"
            case apns = "APNS"
            case baidu = "Baidu"
            case `default` = "Default"
            case defaultSubstitutions = "DefaultSubstitutions"
            case gcm = "GCM"
            case recommenderId = "RecommenderId"
            case tags
            case templateDescription = "TemplateDescription"
        }
    }

    public struct PushNotificationTemplateResponse: AWSDecodableShape {
        /// The message template that's used for the ADM (Amazon Device Messaging) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let adm: AndroidPushNotificationTemplate?
        /// The message template that's used for the APNs (Apple Push Notification service) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let apns: APNSPushNotificationTemplate?
        /// The Amazon Resource Name (ARN) of the message template.
        public let arn: String?
        /// The message template that's used for the Baidu (Baidu Cloud Push) channel. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let baidu: AndroidPushNotificationTemplate?
        /// The date, in ISO 8601 format, when the message template was created.
        public let creationDate: String
        /// The default message template that's used for push notification channels.
        public let `default`: DefaultPushNotificationTemplate?
        /// The JSON object that specifies the default values that are used for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable.
        public let defaultSubstitutions: String?
        /// The message template that's used for the GCM channel, which is used to send notifications through the Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), service. This message template overrides the default template for push notification channels (DefaultPushNotificationTemplate).
        public let gcm: AndroidPushNotificationTemplate?
        /// The date, in ISO 8601 format, when the message template was last modified.
        public let lastModifiedDate: String
        /// The unique identifier for the recommender model that's used by the message template.
        public let recommenderId: String?
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The custom description of the message template.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. For a push notification template, this value is PUSH.
        public let templateType: TemplateType
        /// The unique identifier, as an integer, for the active version of the message template, or the version of the template that you specified by using the version parameter in your request.
        public let version: String?

        public init(adm: AndroidPushNotificationTemplate? = nil, apns: APNSPushNotificationTemplate? = nil, arn: String? = nil, baidu: AndroidPushNotificationTemplate? = nil, creationDate: String, default: DefaultPushNotificationTemplate? = nil, defaultSubstitutions: String? = nil, gcm: AndroidPushNotificationTemplate? = nil, lastModifiedDate: String, recommenderId: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil, templateName: String, templateType: TemplateType, version: String? = nil) {
            self.adm = adm
            self.apns = apns
            self.arn = arn
            self.baidu = baidu
            self.creationDate = creationDate
            self.`default` = `default`
            self.defaultSubstitutions = defaultSubstitutions
            self.gcm = gcm
            self.lastModifiedDate = lastModifiedDate
            self.recommenderId = recommenderId
            self.tags = tags
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case adm = "ADM"
            case apns = "APNS"
            case arn = "Arn"
            case baidu = "Baidu"
            case creationDate = "CreationDate"
            case `default` = "Default"
            case defaultSubstitutions = "DefaultSubstitutions"
            case gcm = "GCM"
            case lastModifiedDate = "LastModifiedDate"
            case recommenderId = "RecommenderId"
            case tags
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case version = "Version"
        }
    }

    public struct PutEventStreamRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeEventStream"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "writeEventStream", location: .body(locationName: "WriteEventStream"))
        ]

        public let applicationId: String
        public let writeEventStream: WriteEventStream

        public init(applicationId: String, writeEventStream: WriteEventStream) {
            self.applicationId = applicationId
            self.writeEventStream = writeEventStream
        }

        private enum CodingKeys: String, CodingKey {
            case writeEventStream = "WriteEventStream"
        }
    }

    public struct PutEventStreamResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "eventStream"
        public static var _encoding = [
            AWSMemberEncoding(label: "eventStream", location: .body(locationName: "EventStream"))
        ]

        public let eventStream: EventStream

        public init(eventStream: EventStream) {
            self.eventStream = eventStream
        }

        private enum CodingKeys: String, CodingKey {
            case eventStream = "EventStream"
        }
    }

    public struct PutEventsRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "eventsRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "eventsRequest", location: .body(locationName: "EventsRequest"))
        ]

        public let applicationId: String
        public let eventsRequest: EventsRequest

        public init(applicationId: String, eventsRequest: EventsRequest) {
            self.applicationId = applicationId
            self.eventsRequest = eventsRequest
        }

        private enum CodingKeys: String, CodingKey {
            case eventsRequest = "EventsRequest"
        }
    }

    public struct PutEventsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "eventsResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "eventsResponse", location: .body(locationName: "EventsResponse"))
        ]

        public let eventsResponse: EventsResponse

        public init(eventsResponse: EventsResponse) {
            self.eventsResponse = eventsResponse
        }

        private enum CodingKeys: String, CodingKey {
            case eventsResponse = "EventsResponse"
        }
    }

    public struct QuietTime: AWSEncodableShape & AWSDecodableShape {
        /// The specific time when quiet time ends. This value has to use 24-hour notation and be in HH:MM format, where HH is the hour (with a leading zero, if applicable) and MM is the minutes. For example, use 02:30 to represent 2:30 AM, or 14:30 to represent 2:30 PM.
        public let end: String?
        /// The specific time when quiet time begins. This value has to use 24-hour notation and be in HH:MM format, where HH is the hour (with a leading zero, if applicable) and MM is the minutes. For example, use 02:30 to represent 2:30 AM, or 14:30 to represent 2:30 PM.
        public let start: String?

        public init(end: String? = nil, start: String? = nil) {
            self.end = end
            self.start = start
        }

        private enum CodingKeys: String, CodingKey {
            case end = "End"
            case start = "Start"
        }
    }

    public struct RandomSplitActivity: AWSEncodableShape & AWSDecodableShape {
        /// The paths for the activity, including the percentage of participants to enter each path and the activity to perform for each path.
        public let branches: [RandomSplitEntry]?

        public init(branches: [RandomSplitEntry]? = nil) {
            self.branches = branches
        }

        private enum CodingKeys: String, CodingKey {
            case branches = "Branches"
        }
    }

    public struct RandomSplitEntry: AWSEncodableShape & AWSDecodableShape {
        /// The unique identifier for the next activity to perform, after completing the activity for the path.
        public let nextActivity: String?
        /// The percentage of participants to send down the activity path. To determine which participants are sent down each path, Amazon Pinpoint applies a probability-based algorithm to the percentages that you specify for the paths. Therefore, the actual percentage of participants who are sent down a path may not be equal to the percentage that you specify.
        public let percentage: Int?

        public init(nextActivity: String? = nil, percentage: Int? = nil) {
            self.nextActivity = nextActivity
            self.percentage = percentage
        }

        private enum CodingKeys: String, CodingKey {
            case nextActivity = "NextActivity"
            case percentage = "Percentage"
        }
    }

    public struct RawEmail: AWSEncodableShape {
        /// The email message, represented as a raw MIME message. The entire message must be base64 encoded.
        public let data: Data?

        public init(data: Data? = nil) {
            self.data = data
        }

        private enum CodingKeys: String, CodingKey {
            case data = "Data"
        }
    }

    public struct RecencyDimension: AWSEncodableShape & AWSDecodableShape {
        /// The duration to use when determining whether an endpoint is active or inactive.
        public let duration: Duration
        /// The type of recency dimension to use for the segment. Valid values are: ACTIVE, endpoints that were active within the specified duration are included in the segment; and, INACTIVE, endpoints that weren't active within the specified duration are included in the segment.
        public let recencyType: RecencyType

        public init(duration: Duration, recencyType: RecencyType) {
            self.duration = duration
            self.recencyType = recencyType
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "Duration"
            case recencyType = "RecencyType"
        }
    }

    public struct RecommenderConfigurationResponse: AWSDecodableShape {
        /// A map that defines 1-10 custom endpoint or user attributes, depending on the value for the RecommendationProviderIdType property. Each of these attributes temporarily stores a recommended item that's retrieved from the recommender model and sent to an AWS Lambda function for additional processing. Each attribute can be used as a message variable in a message template. This value is null if the configuration doesn't invoke an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data.
        public let attributes: [String: String]?
        /// The date, in extended ISO 8601 format, when the configuration was created for the recommender model.
        public let creationDate: String
        /// The custom description of the configuration for the recommender model.
        public let description: String?
        /// The unique identifier for the recommender model configuration.
        public let id: String
        /// The date, in extended ISO 8601 format, when the configuration for the recommender model was last modified.
        public let lastModifiedDate: String
        /// The custom name of the configuration for the recommender model.
        public let name: String?
        /// The type of Amazon Pinpoint ID that's associated with unique user IDs in the recommender model. This value enables the model to use attribute and event data that’s specific to a particular endpoint or user in an Amazon Pinpoint application. Possible values are: PINPOINT_ENDPOINT_ID - Each user in the model is associated with a particular endpoint in Amazon Pinpoint. The data is correlated based on endpoint IDs in Amazon Pinpoint. This is the default value. PINPOINT_USER_ID - Each user in the model is associated with a particular user and endpoint in Amazon Pinpoint. The data is correlated based on user IDs in Amazon Pinpoint. If this value is specified, an endpoint definition in Amazon Pinpoint has to specify both a user ID (UserId) and an endpoint ID. Otherwise, messages won’t be sent to the user's endpoint.
        public let recommendationProviderIdType: String?
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to retrieve recommendation data from the recommender model.
        public let recommendationProviderRoleArn: String
        /// The Amazon Resource Name (ARN) of the recommender model that Amazon Pinpoint retrieves the recommendation data from. This value is the ARN of an Amazon Personalize campaign.
        public let recommendationProviderUri: String
        /// The custom display name for the standard endpoint or user attribute (RecommendationItems) that temporarily stores recommended items for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This name appears in the Attribute finder of the template editor on the Amazon Pinpoint console. This value is null if the configuration doesn't invoke an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data.
        public let recommendationsDisplayName: String?
        /// The number of recommended items that are retrieved from the model for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This number determines how many recommended items are available for use in message variables.
        public let recommendationsPerMessage: Int?
        /// The name or Amazon Resource Name (ARN) of the AWS Lambda function that Amazon Pinpoint invokes to perform additional processing of recommendation data that it retrieves from the recommender model.
        public let recommendationTransformerUri: String?

        public init(attributes: [String: String]? = nil, creationDate: String, description: String? = nil, id: String, lastModifiedDate: String, name: String? = nil, recommendationProviderIdType: String? = nil, recommendationProviderRoleArn: String, recommendationProviderUri: String, recommendationsDisplayName: String? = nil, recommendationsPerMessage: Int? = nil, recommendationTransformerUri: String? = nil) {
            self.attributes = attributes
            self.creationDate = creationDate
            self.description = description
            self.id = id
            self.lastModifiedDate = lastModifiedDate
            self.name = name
            self.recommendationProviderIdType = recommendationProviderIdType
            self.recommendationProviderRoleArn = recommendationProviderRoleArn
            self.recommendationProviderUri = recommendationProviderUri
            self.recommendationsDisplayName = recommendationsDisplayName
            self.recommendationsPerMessage = recommendationsPerMessage
            self.recommendationTransformerUri = recommendationTransformerUri
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
            case creationDate = "CreationDate"
            case description = "Description"
            case id = "Id"
            case lastModifiedDate = "LastModifiedDate"
            case name = "Name"
            case recommendationProviderIdType = "RecommendationProviderIdType"
            case recommendationProviderRoleArn = "RecommendationProviderRoleArn"
            case recommendationProviderUri = "RecommendationProviderUri"
            case recommendationsDisplayName = "RecommendationsDisplayName"
            case recommendationsPerMessage = "RecommendationsPerMessage"
            case recommendationTransformerUri = "RecommendationTransformerUri"
        }
    }

    public struct RemoveAttributesRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "updateAttributesRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "attributeType", location: .uri(locationName: "attribute-type")),
            AWSMemberEncoding(label: "updateAttributesRequest", location: .body(locationName: "UpdateAttributesRequest"))
        ]

        public let applicationId: String
        public let attributeType: String
        public let updateAttributesRequest: UpdateAttributesRequest

        public init(applicationId: String, attributeType: String, updateAttributesRequest: UpdateAttributesRequest) {
            self.applicationId = applicationId
            self.attributeType = attributeType
            self.updateAttributesRequest = updateAttributesRequest
        }

        private enum CodingKeys: String, CodingKey {
            case updateAttributesRequest = "UpdateAttributesRequest"
        }
    }

    public struct RemoveAttributesResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "attributesResource"
        public static var _encoding = [
            AWSMemberEncoding(label: "attributesResource", location: .body(locationName: "AttributesResource"))
        ]

        public let attributesResource: AttributesResource

        public init(attributesResource: AttributesResource) {
            self.attributesResource = attributesResource
        }

        private enum CodingKeys: String, CodingKey {
            case attributesResource = "AttributesResource"
        }
    }

    public struct ResultRow: AWSDecodableShape {
        /// An array of objects that defines the field and field values that were used to group data in a result set that contains multiple results. This value is null if the data in a result set isn’t grouped.
        public let groupedBys: [ResultRowValue]
        /// An array of objects that provides pre-aggregated values for a standard metric that applies to an application, campaign, or journey.
        public let values: [ResultRowValue]

        public init(groupedBys: [ResultRowValue], values: [ResultRowValue]) {
            self.groupedBys = groupedBys
            self.values = values
        }

        private enum CodingKeys: String, CodingKey {
            case groupedBys = "GroupedBys"
            case values = "Values"
        }
    }

    public struct ResultRowValue: AWSDecodableShape {
        /// The friendly name of the metric whose value is specified by the Value property.
        public let key: String
        /// The data type of the value specified by the Value property.
        public let type: String
        /// In a Values object, the value for the metric that the query retrieved data for. In a GroupedBys object, the value for the field that was used to group data in a result set that contains multiple results (Values objects).
        public let value: String

        public init(key: String, type: String, value: String) {
            self.key = key
            self.type = type
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case type = "Type"
            case value = "Value"
        }
    }

    public struct SMSChannelRequest: AWSEncodableShape {
        /// Specifies whether to enable the SMS channel for the application.
        public let enabled: Bool?
        /// The identity that you want to display on recipients' devices when they receive messages from the SMS channel.
        public let senderId: String?
        /// The registered short code that you want to use when you send messages through the SMS channel.
        public let shortCode: String?

        public init(enabled: Bool? = nil, senderId: String? = nil, shortCode: String? = nil) {
            self.enabled = enabled
            self.senderId = senderId
            self.shortCode = shortCode
        }

        private enum CodingKeys: String, CodingKey {
            case enabled = "Enabled"
            case senderId = "SenderId"
            case shortCode = "ShortCode"
        }
    }

    public struct SMSChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the SMS channel applies to.
        public let applicationId: String?
        /// The date and time, in ISO 8601 format, when the SMS channel was enabled.
        public let creationDate: String?
        /// Specifies whether the SMS channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the SMS channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the SMS channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the SMS channel.
        public let lastModifiedBy: String?
        /// The date and time, in ISO 8601 format, when the SMS channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the SMS channel, this value is SMS.
        public let platform: String
        /// The maximum number of promotional messages that you can send through the SMS channel each second.
        public let promotionalMessagesPerSecond: Int?
        /// The identity that displays on recipients' devices when they receive messages from the SMS channel.
        public let senderId: String?
        /// The registered short code to use when you send messages through the SMS channel.
        public let shortCode: String?
        /// The maximum number of transactional messages that you can send through the SMS channel each second.
        public let transactionalMessagesPerSecond: Int?
        /// The current version of the SMS channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, promotionalMessagesPerSecond: Int? = nil, senderId: String? = nil, shortCode: String? = nil, transactionalMessagesPerSecond: Int? = nil, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.promotionalMessagesPerSecond = promotionalMessagesPerSecond
            self.senderId = senderId
            self.shortCode = shortCode
            self.transactionalMessagesPerSecond = transactionalMessagesPerSecond
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case promotionalMessagesPerSecond = "PromotionalMessagesPerSecond"
            case senderId = "SenderId"
            case shortCode = "ShortCode"
            case transactionalMessagesPerSecond = "TransactionalMessagesPerSecond"
            case version = "Version"
        }
    }

    public struct SMSMessage: AWSEncodableShape {
        /// The body of the SMS message.
        public let body: String?
        /// The entity ID or Principal Entity (PE) id received from the regulatory body for sending SMS in your country.
        public let entityId: String?
        /// The SMS program name that you provided to AWS Support when you requested your dedicated number.
        public let keyword: String?
        /// This field is reserved for future use.
        public let mediaUrl: String?
        /// The SMS message type. Valid values are TRANSACTIONAL (for messages that are critical or time-sensitive, such as a one-time passwords) and PROMOTIONAL (for messsages that aren't critical or time-sensitive, such as marketing messages).
        public let messageType: MessageType?
        /// The number to send the SMS message from. This value should be one of the dedicated long or short codes that's assigned to your AWS account. If you don't specify a long or short code, Amazon Pinpoint assigns a random long code to the SMS message and sends the message from that code.
        public let originationNumber: String?
        /// The sender ID to display as the sender of the message on a recipient's device. Support for sender IDs varies by country or region.
        public let senderId: String?
        /// The message variables to use in the SMS message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The template ID received from the regulatory body for sending SMS in your country.
        public let templateId: String?

        public init(body: String? = nil, entityId: String? = nil, keyword: String? = nil, mediaUrl: String? = nil, messageType: MessageType? = nil, originationNumber: String? = nil, senderId: String? = nil, substitutions: [String: [String]]? = nil, templateId: String? = nil) {
            self.body = body
            self.entityId = entityId
            self.keyword = keyword
            self.mediaUrl = mediaUrl
            self.messageType = messageType
            self.originationNumber = originationNumber
            self.senderId = senderId
            self.substitutions = substitutions
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case entityId = "EntityId"
            case keyword = "Keyword"
            case mediaUrl = "MediaUrl"
            case messageType = "MessageType"
            case originationNumber = "OriginationNumber"
            case senderId = "SenderId"
            case substitutions = "Substitutions"
            case templateId = "TemplateId"
        }
    }

    public struct SMSMessageActivity: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the sender ID and message type for an SMS message that's sent to participants in a journey.
        public let messageConfig: JourneySMSMessage?
        /// The unique identifier for the next activity to perform, after the message is sent.
        public let nextActivity: String?
        /// The name of the SMS message template to use for the message. If specified, this value must match the name of an existing message template.
        public let templateName: String?
        /// The unique identifier for the version of the SMS template to use for the message. If specified, this value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource. If you don't specify a value for this property, Amazon Pinpoint uses the active version of the template. The active version is typically the version of a template that's been most recently reviewed and approved for use, depending on your workflow. It isn't necessarily the latest version of a template.
        public let templateVersion: String?

        public init(messageConfig: JourneySMSMessage? = nil, nextActivity: String? = nil, templateName: String? = nil, templateVersion: String? = nil) {
            self.messageConfig = messageConfig
            self.nextActivity = nextActivity
            self.templateName = templateName
            self.templateVersion = templateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case messageConfig = "MessageConfig"
            case nextActivity = "NextActivity"
            case templateName = "TemplateName"
            case templateVersion = "TemplateVersion"
        }
    }

    public struct SMSTemplateRequest: AWSEncodableShape {
        /// The message body to use in text messages that are based on the message template.
        public let body: String?
        /// A JSON object that specifies the default values to use for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable. When you create a message that's based on the template, you can override these defaults with message-specific and address-specific variables and values.
        public let defaultSubstitutions: String?
        /// The unique identifier for the recommender model to use for the message template. Amazon Pinpoint uses this value to determine how to retrieve and process data from a recommender model when it sends messages that use the template, if the template contains message variables for recommendation data.
        public let recommenderId: String?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// A custom description of the message template.
        public let templateDescription: String?

        public init(body: String? = nil, defaultSubstitutions: String? = nil, recommenderId: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil) {
            self.body = body
            self.defaultSubstitutions = defaultSubstitutions
            self.recommenderId = recommenderId
            self.tags = tags
            self.templateDescription = templateDescription
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case defaultSubstitutions = "DefaultSubstitutions"
            case recommenderId = "RecommenderId"
            case tags
            case templateDescription = "TemplateDescription"
        }
    }

    public struct SMSTemplateResponse: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the message template.
        public let arn: String?
        /// The message body that's used in text messages that are based on the message template.
        public let body: String?
        /// The date, in ISO 8601 format, when the message template was created.
        public let creationDate: String
        /// The JSON object that specifies the default values that are used for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable.
        public let defaultSubstitutions: String?
        /// The date, in ISO 8601 format, when the message template was last modified.
        public let lastModifiedDate: String
        /// The unique identifier for the recommender model that's used by the message template.
        public let recommenderId: String?
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The custom description of the message template.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. For an SMS template, this value is SMS.
        public let templateType: TemplateType
        /// The unique identifier, as an integer, for the active version of the message template, or the version of the template that you specified by using the version parameter in your request.
        public let version: String?

        public init(arn: String? = nil, body: String? = nil, creationDate: String, defaultSubstitutions: String? = nil, lastModifiedDate: String, recommenderId: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil, templateName: String, templateType: TemplateType, version: String? = nil) {
            self.arn = arn
            self.body = body
            self.creationDate = creationDate
            self.defaultSubstitutions = defaultSubstitutions
            self.lastModifiedDate = lastModifiedDate
            self.recommenderId = recommenderId
            self.tags = tags
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case body = "Body"
            case creationDate = "CreationDate"
            case defaultSubstitutions = "DefaultSubstitutions"
            case lastModifiedDate = "LastModifiedDate"
            case recommenderId = "RecommenderId"
            case tags
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case version = "Version"
        }
    }

    public struct Schedule: AWSEncodableShape & AWSDecodableShape {
        /// The scheduled time, in ISO 8601 format, when the campaign ended or will end.
        public let endTime: String?
        /// The type of event that causes the campaign to be sent, if the value of the Frequency property is EVENT.
        public let eventFilter: CampaignEventFilter?
        /// Specifies how often the campaign is sent or whether the campaign is sent in response to a specific event.
        public let frequency: Frequency?
        /// Specifies whether the start and end times for the campaign schedule use each recipient's local time. To base the schedule on each recipient's local time, set this value to true.
        public let isLocalTime: Bool?
        /// The default quiet time for the campaign. Quiet time is a specific time range when a campaign doesn't send messages to endpoints, if all the following conditions are met: The EndpointDemographic.Timezone property of the endpoint is set to a valid value. The current time in the endpoint's time zone is later than or equal to the time specified by the QuietTime.Start property for the campaign. The current time in the endpoint's time zone is earlier than or equal to the time specified by the QuietTime.End property for the campaign. If any of the preceding conditions isn't met, the endpoint will receive messages from the campaign, even if quiet time is enabled.
        public let quietTime: QuietTime?
        /// The scheduled time when the campaign began or will begin. Valid values are: IMMEDIATE, to start the campaign immediately; or, a specific time in ISO 8601 format.
        public let startTime: String
        /// The starting UTC offset for the campaign schedule, if the value of the IsLocalTime property is true. Valid values are: UTC, UTC+01, UTC+02, UTC+03, UTC+03:30, UTC+04, UTC+04:30, UTC+05,
        ///                   UTC+05:30, UTC+05:45, UTC+06, UTC+06:30, UTC+07, UTC+08, UTC+09, UTC+09:30,
        ///                   UTC+10, UTC+10:30, UTC+11, UTC+12, UTC+13, UTC-02, UTC-03, UTC-04, UTC-05, UTC-06,
        ///                   UTC-07, UTC-08, UTC-09, UTC-10, and UTC-11.
        public let timezone: String?

        public init(endTime: String? = nil, eventFilter: CampaignEventFilter? = nil, frequency: Frequency? = nil, isLocalTime: Bool? = nil, quietTime: QuietTime? = nil, startTime: String, timezone: String? = nil) {
            self.endTime = endTime
            self.eventFilter = eventFilter
            self.frequency = frequency
            self.isLocalTime = isLocalTime
            self.quietTime = quietTime
            self.startTime = startTime
            self.timezone = timezone
        }

        private enum CodingKeys: String, CodingKey {
            case endTime = "EndTime"
            case eventFilter = "EventFilter"
            case frequency = "Frequency"
            case isLocalTime = "IsLocalTime"
            case quietTime = "QuietTime"
            case startTime = "StartTime"
            case timezone = "Timezone"
        }
    }

    public struct SegmentBehaviors: AWSEncodableShape & AWSDecodableShape {
        /// The dimension settings that are based on how recently an endpoint was active.
        public let recency: RecencyDimension?

        public init(recency: RecencyDimension? = nil) {
            self.recency = recency
        }

        private enum CodingKeys: String, CodingKey {
            case recency = "Recency"
        }
    }

    public struct SegmentCondition: AWSEncodableShape & AWSDecodableShape {
        /// The unique identifier for the segment to associate with the activity.
        public let segmentId: String

        public init(segmentId: String) {
            self.segmentId = segmentId
        }

        private enum CodingKeys: String, CodingKey {
            case segmentId = "SegmentId"
        }
    }

    public struct SegmentDemographics: AWSEncodableShape & AWSDecodableShape {
        /// The app version criteria for the segment.
        public let appVersion: SetDimension?
        /// The channel criteria for the segment.
        public let channel: SetDimension?
        /// The device type criteria for the segment.
        public let deviceType: SetDimension?
        /// The device make criteria for the segment.
        public let make: SetDimension?
        /// The device model criteria for the segment.
        public let model: SetDimension?
        /// The device platform criteria for the segment.
        public let platform: SetDimension?

        public init(appVersion: SetDimension? = nil, channel: SetDimension? = nil, deviceType: SetDimension? = nil, make: SetDimension? = nil, model: SetDimension? = nil, platform: SetDimension? = nil) {
            self.appVersion = appVersion
            self.channel = channel
            self.deviceType = deviceType
            self.make = make
            self.model = model
            self.platform = platform
        }

        private enum CodingKeys: String, CodingKey {
            case appVersion = "AppVersion"
            case channel = "Channel"
            case deviceType = "DeviceType"
            case make = "Make"
            case model = "Model"
            case platform = "Platform"
        }
    }

    public struct SegmentDimensions: AWSEncodableShape & AWSDecodableShape {
        /// One or more custom attributes to use as criteria for the segment.
        public let attributes: [String: AttributeDimension]?
        /// The behavior-based criteria, such as how recently users have used your app, for the segment.
        public let behavior: SegmentBehaviors?
        /// The demographic-based criteria, such as device platform, for the segment.
        public let demographic: SegmentDemographics?
        /// The location-based criteria, such as region or GPS coordinates, for the segment.
        public let location: SegmentLocation?
        /// One or more custom metrics to use as criteria for the segment.
        public let metrics: [String: MetricDimension]?
        /// One or more custom user attributes to use as criteria for the segment.
        public let userAttributes: [String: AttributeDimension]?

        public init(attributes: [String: AttributeDimension]? = nil, behavior: SegmentBehaviors? = nil, demographic: SegmentDemographics? = nil, location: SegmentLocation? = nil, metrics: [String: MetricDimension]? = nil, userAttributes: [String: AttributeDimension]? = nil) {
            self.attributes = attributes
            self.behavior = behavior
            self.demographic = demographic
            self.location = location
            self.metrics = metrics
            self.userAttributes = userAttributes
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
            case behavior = "Behavior"
            case demographic = "Demographic"
            case location = "Location"
            case metrics = "Metrics"
            case userAttributes = "UserAttributes"
        }
    }

    public struct SegmentGroup: AWSEncodableShape & AWSDecodableShape {
        /// An array that defines the dimensions for the segment.
        public let dimensions: [SegmentDimensions]?
        /// The base segment to build the segment on. A base segment, also referred to as a source segment, defines the initial population of endpoints for a segment. When you add dimensions to a segment, Amazon Pinpoint filters the base segment by using the dimensions that you specify. You can specify more than one dimensional segment or only one imported segment. If you specify an imported segment, the Amazon Pinpoint console displays a segment size estimate that indicates the size of the imported segment without any filters applied to it.
        public let sourceSegments: [SegmentReference]?
        /// Specifies how to handle multiple base segments for the segment. For example, if you specify three base segments for the segment, whether the resulting segment is based on all, any, or none of the base segments.
        public let sourceType: SourceType?
        /// Specifies how to handle multiple dimensions for the segment. For example, if you specify three dimensions for the segment, whether the resulting segment includes endpoints that match all, any, or none of the dimensions.
        public let type: `Type`?

        public init(dimensions: [SegmentDimensions]? = nil, sourceSegments: [SegmentReference]? = nil, sourceType: SourceType? = nil, type: `Type`? = nil) {
            self.dimensions = dimensions
            self.sourceSegments = sourceSegments
            self.sourceType = sourceType
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case dimensions = "Dimensions"
            case sourceSegments = "SourceSegments"
            case sourceType = "SourceType"
            case type = "Type"
        }
    }

    public struct SegmentGroupList: AWSEncodableShape & AWSDecodableShape {
        /// An array that defines the set of segment criteria to evaluate when handling segment groups for the segment.
        public let groups: [SegmentGroup]?
        /// Specifies how to handle multiple segment groups for the segment. For example, if the segment includes three segment groups, whether the resulting segment includes endpoints that match all, any, or none of the segment groups.
        public let include: Include?

        public init(groups: [SegmentGroup]? = nil, include: Include? = nil) {
            self.groups = groups
            self.include = include
        }

        private enum CodingKeys: String, CodingKey {
            case groups = "Groups"
            case include = "Include"
        }
    }

    public struct SegmentImportResource: AWSDecodableShape {
        /// The number of channel types in the endpoint definitions that were imported to create the segment.
        public let channelCounts: [String: Int]?
        /// (Deprecated) Your AWS account ID, which you assigned to an external ID key in an IAM trust policy. Amazon Pinpoint previously used this value to assume an IAM role when importing endpoint definitions, but we removed this requirement. We don't recommend use of external IDs for IAM roles that are assumed by Amazon Pinpoint.
        public let externalId: String
        /// The format of the files that were imported to create the segment. Valid values are: CSV, for comma-separated values format; and, JSON, for newline-delimited JSON format.
        public let format: Format
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorized Amazon Pinpoint to access the Amazon S3 location to import endpoint definitions from.
        public let roleArn: String
        /// The URL of the Amazon Simple Storage Service (Amazon S3) bucket that the endpoint definitions were imported from to create the segment.
        public let s3Url: String
        /// The number of endpoint definitions that were imported successfully to create the segment.
        public let size: Int

        public init(channelCounts: [String: Int]? = nil, externalId: String, format: Format, roleArn: String, s3Url: String, size: Int) {
            self.channelCounts = channelCounts
            self.externalId = externalId
            self.format = format
            self.roleArn = roleArn
            self.s3Url = s3Url
            self.size = size
        }

        private enum CodingKeys: String, CodingKey {
            case channelCounts = "ChannelCounts"
            case externalId = "ExternalId"
            case format = "Format"
            case roleArn = "RoleArn"
            case s3Url = "S3Url"
            case size = "Size"
        }
    }

    public struct SegmentLocation: AWSEncodableShape & AWSDecodableShape {
        /// The country or region code, in ISO 3166-1 alpha-2 format, for the segment.
        public let country: SetDimension?
        /// The GPS location and range for the segment.
        public let gPSPoint: GPSPointDimension?

        public init(country: SetDimension? = nil, gPSPoint: GPSPointDimension? = nil) {
            self.country = country
            self.gPSPoint = gPSPoint
        }

        private enum CodingKeys: String, CodingKey {
            case country = "Country"
            case gPSPoint = "GPSPoint"
        }
    }

    public struct SegmentReference: AWSEncodableShape & AWSDecodableShape {
        /// The unique identifier for the segment.
        public let id: String
        /// The version number of the segment.
        public let version: Int?

        public init(id: String, version: Int? = nil) {
            self.id = id
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
            case version = "Version"
        }
    }

    public struct SegmentResponse: AWSDecodableShape {
        /// The unique identifier for the application that the segment is associated with.
        public let applicationId: String
        /// The Amazon Resource Name (ARN) of the segment.
        public let arn: String
        /// The date and time when the segment was created.
        public let creationDate: String
        /// The dimension settings for the segment.
        public let dimensions: SegmentDimensions?
        /// The unique identifier for the segment.
        public let id: String
        /// The settings for the import job that's associated with the segment.
        public let importDefinition: SegmentImportResource?
        /// The date and time when the segment was last modified.
        public let lastModifiedDate: String?
        /// The name of the segment.
        public let name: String?
        /// A list of one or more segment groups that apply to the segment. Each segment group consists of zero or more base segments and the dimensions that are applied to those base segments.
        public let segmentGroups: SegmentGroupList?
        /// The segment type. Valid values are: DIMENSIONAL - A dynamic segment, which is a segment that uses selection criteria that you specify and is based on endpoint data that's reported by your app. Dynamic segments can change over time. IMPORT - A static segment, which is a segment that uses selection criteria that you specify and is based on endpoint definitions that you import from a file. Imported segments are static; they don't change over time.
        public let segmentType: SegmentType
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the segment. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The version number of the segment.
        public let version: Int?

        public init(applicationId: String, arn: String, creationDate: String, dimensions: SegmentDimensions? = nil, id: String, importDefinition: SegmentImportResource? = nil, lastModifiedDate: String? = nil, name: String? = nil, segmentGroups: SegmentGroupList? = nil, segmentType: SegmentType, tags: [String: String]? = nil, version: Int? = nil) {
            self.applicationId = applicationId
            self.arn = arn
            self.creationDate = creationDate
            self.dimensions = dimensions
            self.id = id
            self.importDefinition = importDefinition
            self.lastModifiedDate = lastModifiedDate
            self.name = name
            self.segmentGroups = segmentGroups
            self.segmentType = segmentType
            self.tags = tags
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case arn = "Arn"
            case creationDate = "CreationDate"
            case dimensions = "Dimensions"
            case id = "Id"
            case importDefinition = "ImportDefinition"
            case lastModifiedDate = "LastModifiedDate"
            case name = "Name"
            case segmentGroups = "SegmentGroups"
            case segmentType = "SegmentType"
            case tags
            case version = "Version"
        }
    }

    public struct SegmentsResponse: AWSDecodableShape {
        /// An array of responses, one for each segment that's associated with the application (Segments resource) or each version of a segment that's associated with the application (Segment Versions resource).
        public let item: [SegmentResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [SegmentResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct SendMessagesRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "messageRequest", location: .body(locationName: "MessageRequest"))
        ]

        public let applicationId: String
        public let messageRequest: MessageRequest

        public init(applicationId: String, messageRequest: MessageRequest) {
            self.applicationId = applicationId
            self.messageRequest = messageRequest
        }

        private enum CodingKeys: String, CodingKey {
            case messageRequest = "MessageRequest"
        }
    }

    public struct SendMessagesResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageResponse", location: .body(locationName: "MessageResponse"))
        ]

        public let messageResponse: MessageResponse

        public init(messageResponse: MessageResponse) {
            self.messageResponse = messageResponse
        }

        private enum CodingKeys: String, CodingKey {
            case messageResponse = "MessageResponse"
        }
    }

    public struct SendUsersMessageRequest: AWSEncodableShape {
        /// A map of custom attribute-value pairs. For a push notification, Amazon Pinpoint adds these attributes to the data.pinpoint object in the body of the notification payload. Amazon Pinpoint also provides these attributes in the events that it generates for users-messages deliveries.
        public let context: [String: String]?
        /// The settings and content for the default message and any default messages that you defined for specific channels.
        public let messageConfiguration: DirectMessageConfiguration
        /// The message template to use for the message.
        public let templateConfiguration: TemplateConfiguration?
        /// The unique identifier for tracing the message. This identifier is visible to message recipients.
        public let traceId: String?
        /// A map that associates user IDs with EndpointSendConfiguration objects. You can use an EndpointSendConfiguration object to tailor the message for a user by specifying settings such as content overrides and message variables.
        public let users: [String: EndpointSendConfiguration]

        public init(context: [String: String]? = nil, messageConfiguration: DirectMessageConfiguration, templateConfiguration: TemplateConfiguration? = nil, traceId: String? = nil, users: [String: EndpointSendConfiguration]) {
            self.context = context
            self.messageConfiguration = messageConfiguration
            self.templateConfiguration = templateConfiguration
            self.traceId = traceId
            self.users = users
        }

        private enum CodingKeys: String, CodingKey {
            case context = "Context"
            case messageConfiguration = "MessageConfiguration"
            case templateConfiguration = "TemplateConfiguration"
            case traceId = "TraceId"
            case users = "Users"
        }
    }

    public struct SendUsersMessageResponse: AWSDecodableShape {
        /// The unique identifier for the application that was used to send the message.
        public let applicationId: String
        /// The unique identifier that was assigned to the message request.
        public let requestId: String?
        /// An object that indicates which endpoints the message was sent to, for each user. The object lists user IDs and, for each user ID, provides the endpoint IDs that the message was sent to. For each endpoint ID, it provides an EndpointMessageResult object.
        public let result: [String: [String: EndpointMessageResult]]?

        public init(applicationId: String, requestId: String? = nil, result: [String: [String: EndpointMessageResult]]? = nil) {
            self.applicationId = applicationId
            self.requestId = requestId
            self.result = result
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case requestId = "RequestId"
            case result = "Result"
        }
    }

    public struct SendUsersMessagesRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sendUsersMessageRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "sendUsersMessageRequest", location: .body(locationName: "SendUsersMessageRequest"))
        ]

        public let applicationId: String
        public let sendUsersMessageRequest: SendUsersMessageRequest

        public init(applicationId: String, sendUsersMessageRequest: SendUsersMessageRequest) {
            self.applicationId = applicationId
            self.sendUsersMessageRequest = sendUsersMessageRequest
        }

        private enum CodingKeys: String, CodingKey {
            case sendUsersMessageRequest = "SendUsersMessageRequest"
        }
    }

    public struct SendUsersMessagesResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sendUsersMessageResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "sendUsersMessageResponse", location: .body(locationName: "SendUsersMessageResponse"))
        ]

        public let sendUsersMessageResponse: SendUsersMessageResponse

        public init(sendUsersMessageResponse: SendUsersMessageResponse) {
            self.sendUsersMessageResponse = sendUsersMessageResponse
        }

        private enum CodingKeys: String, CodingKey {
            case sendUsersMessageResponse = "SendUsersMessageResponse"
        }
    }

    public struct Session: AWSEncodableShape {
        /// The duration of the session, in milliseconds.
        public let duration: Int?
        /// The unique identifier for the session.
        public let id: String
        /// The date and time when the session began.
        public let startTimestamp: String
        /// The date and time when the session ended.
        public let stopTimestamp: String?

        public init(duration: Int? = nil, id: String, startTimestamp: String, stopTimestamp: String? = nil) {
            self.duration = duration
            self.id = id
            self.startTimestamp = startTimestamp
            self.stopTimestamp = stopTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "Duration"
            case id = "Id"
            case startTimestamp = "StartTimestamp"
            case stopTimestamp = "StopTimestamp"
        }
    }

    public struct SetDimension: AWSEncodableShape & AWSDecodableShape {
        /// The type of segment dimension to use. Valid values are: INCLUSIVE, endpoints that match the criteria are included in the segment; and, EXCLUSIVE, endpoints that match the criteria are excluded from the segment.
        public let dimensionType: DimensionType?
        /// The criteria values to use for the segment dimension. Depending on the value of the DimensionType property, endpoints are included or excluded from the segment if their values match the criteria values.
        public let values: [String]

        public init(dimensionType: DimensionType? = nil, values: [String]) {
            self.dimensionType = dimensionType
            self.values = values
        }

        private enum CodingKeys: String, CodingKey {
            case dimensionType = "DimensionType"
            case values = "Values"
        }
    }

    public struct SimpleCondition: AWSEncodableShape & AWSDecodableShape {
        /// The dimension settings for the event that's associated with the activity.
        public let eventCondition: EventCondition?
        /// The segment that's associated with the activity.
        public let segmentCondition: SegmentCondition?
        /// The dimension settings for the segment that's associated with the activity.
        public let segmentDimensions: SegmentDimensions?

        public init(eventCondition: EventCondition? = nil, segmentCondition: SegmentCondition? = nil, segmentDimensions: SegmentDimensions? = nil) {
            self.eventCondition = eventCondition
            self.segmentCondition = segmentCondition
            self.segmentDimensions = segmentDimensions
        }

        private enum CodingKeys: String, CodingKey {
            case eventCondition = "EventCondition"
            case segmentCondition = "SegmentCondition"
            case segmentDimensions
        }
    }

    public struct SimpleEmail: AWSEncodableShape {
        /// The body of the email message, in HTML format. We recommend using HTML format for email clients that render HTML content. You can include links, formatted text, and more in an HTML message.
        public let htmlPart: SimpleEmailPart?
        /// The subject line, or title, of the email.
        public let subject: SimpleEmailPart?
        /// The body of the email message, in plain text format. We recommend using plain text format for email clients that don't render HTML content and clients that are connected to high-latency networks, such as mobile devices.
        public let textPart: SimpleEmailPart?

        public init(htmlPart: SimpleEmailPart? = nil, subject: SimpleEmailPart? = nil, textPart: SimpleEmailPart? = nil) {
            self.htmlPart = htmlPart
            self.subject = subject
            self.textPart = textPart
        }

        private enum CodingKeys: String, CodingKey {
            case htmlPart = "HtmlPart"
            case subject = "Subject"
            case textPart = "TextPart"
        }
    }

    public struct SimpleEmailPart: AWSEncodableShape {
        /// The applicable character set for the message content.
        public let charset: String?
        /// The textual data of the message content.
        public let data: String?

        public init(charset: String? = nil, data: String? = nil) {
            self.charset = charset
            self.data = data
        }

        private enum CodingKeys: String, CodingKey {
            case charset = "Charset"
            case data = "Data"
        }
    }

    public struct StartCondition: AWSEncodableShape & AWSDecodableShape {
        /// The custom description of the condition.
        public let description: String?
        public let eventStartCondition: EventStartCondition?
        /// The segment that's associated with the first activity in the journey. This segment determines which users are participants in the journey.
        public let segmentStartCondition: SegmentCondition?

        public init(description: String? = nil, eventStartCondition: EventStartCondition? = nil, segmentStartCondition: SegmentCondition? = nil) {
            self.description = description
            self.eventStartCondition = eventStartCondition
            self.segmentStartCondition = segmentStartCondition
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case eventStartCondition = "EventStartCondition"
            case segmentStartCondition = "SegmentStartCondition"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "tagsModel"
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn")),
            AWSMemberEncoding(label: "tagsModel", location: .body(locationName: "TagsModel"))
        ]

        public let resourceArn: String
        public let tagsModel: TagsModel

        public init(resourceArn: String, tagsModel: TagsModel) {
            self.resourceArn = resourceArn
            self.tagsModel = tagsModel
        }

        private enum CodingKeys: String, CodingKey {
            case tagsModel = "TagsModel"
        }
    }

    public struct TagsModel: AWSEncodableShape & AWSDecodableShape {
        /// A string-to-string map of key-value pairs that defines the tags for an application, campaign, message template, or segment. Each of these resources can have a maximum of 50 tags. Each tag consists of a required tag key and an associated tag value. The maximum length of a tag key is 128 characters. The maximum length of a tag value is 256 characters.
        public let tags: [String: String]

        public init(tags: [String: String]) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct Template: AWSEncodableShape & AWSDecodableShape {
        /// The name of the message template to use for the message. If specified, this value must match the name of an existing message template.
        public let name: String?
        /// The unique identifier for the version of the message template to use for the message. If specified, this value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource. If you don't specify a value for this property, Amazon Pinpoint uses the active version of the template. The active version is typically the version of a template that's been most recently reviewed and approved for use, depending on your workflow. It isn't necessarily the latest version of a template.
        public let version: String?

        public init(name: String? = nil, version: String? = nil) {
            self.name = name
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case version = "Version"
        }
    }

    public struct TemplateActiveVersionRequest: AWSEncodableShape {
        /// The version of the message template to use as the active version of the template. Valid values are: latest, for the most recent version of the template; or, the unique identifier for any existing version of the template. If you specify an identifier, the value must match the identifier for an existing template version. To retrieve a list of versions and version identifiers for a template, use the Template Versions resource.
        public let version: String?

        public init(version: String? = nil) {
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case version = "Version"
        }
    }

    public struct TemplateConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The email template to use for the message.
        public let emailTemplate: Template?
        /// The push notification template to use for the message.
        public let pushTemplate: Template?
        /// The SMS template to use for the message.
        public let sMSTemplate: Template?
        /// The voice template to use for the message. This object isn't supported for campaigns.
        public let voiceTemplate: Template?

        public init(emailTemplate: Template? = nil, pushTemplate: Template? = nil, sMSTemplate: Template? = nil, voiceTemplate: Template? = nil) {
            self.emailTemplate = emailTemplate
            self.pushTemplate = pushTemplate
            self.sMSTemplate = sMSTemplate
            self.voiceTemplate = voiceTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case emailTemplate = "EmailTemplate"
            case pushTemplate = "PushTemplate"
            case sMSTemplate = "SMSTemplate"
            case voiceTemplate = "VoiceTemplate"
        }
    }

    public struct TemplateResponse: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the message template. This value isn't included in a TemplateResponse object. To retrieve the ARN of a template, use the GetEmailTemplate, GetPushTemplate, GetSmsTemplate, or GetVoiceTemplate operation, depending on the type of template that you want to retrieve the ARN for.
        public let arn: String?
        /// The date, in ISO 8601 format, when the message template was created.
        public let creationDate: String
        /// The JSON object that specifies the default values that are used for message variables in the message template. This object isn't included in a TemplateResponse object. To retrieve this object for a template, use the GetEmailTemplate, GetPushTemplate, GetSmsTemplate, or GetVoiceTemplate operation, depending on the type of template that you want to retrieve the object for.
        public let defaultSubstitutions: String?
        /// The date, in ISO 8601 format, when the message template was last modified.
        public let lastModifiedDate: String
        /// A map of key-value pairs that identifies the tags that are associated with the message template. This object isn't included in a TemplateResponse object. To retrieve this object for a template, use the GetEmailTemplate, GetPushTemplate, GetSmsTemplate, or GetVoiceTemplate operation, depending on the type of template that you want to retrieve the object for.
        public let tags: [String: String]?
        /// The custom description of the message template. This value isn't included in a TemplateResponse object. To retrieve the description of a template, use the GetEmailTemplate, GetPushTemplate, GetSmsTemplate, or GetVoiceTemplate operation, depending on the type of template that you want to retrieve the description for.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, and VOICE.
        public let templateType: TemplateType
        /// The unique identifier, as an integer, for the active version of the message template.
        public let version: String?

        public init(arn: String? = nil, creationDate: String, defaultSubstitutions: String? = nil, lastModifiedDate: String, tags: [String: String]? = nil, templateDescription: String? = nil, templateName: String, templateType: TemplateType, version: String? = nil) {
            self.arn = arn
            self.creationDate = creationDate
            self.defaultSubstitutions = defaultSubstitutions
            self.lastModifiedDate = lastModifiedDate
            self.tags = tags
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case creationDate = "CreationDate"
            case defaultSubstitutions = "DefaultSubstitutions"
            case lastModifiedDate = "LastModifiedDate"
            case tags
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case version = "Version"
        }
    }

    public struct TemplateVersionResponse: AWSDecodableShape {
        /// The date, in ISO 8601 format, when the version of the message template was created.
        public let creationDate: String
        /// A JSON object that specifies the default values that are used for message variables in the version of the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable.
        public let defaultSubstitutions: String?
        /// The date, in ISO 8601 format, when the version of the message template was last modified.
        public let lastModifiedDate: String
        /// The custom description of the version of the message template.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, and VOICE.
        public let templateType: String
        /// The unique identifier for the version of the message template. This value is an integer that Amazon Pinpoint automatically increments and assigns to each new version of a template.
        public let version: String?

        public init(creationDate: String, defaultSubstitutions: String? = nil, lastModifiedDate: String, templateDescription: String? = nil, templateName: String, templateType: String, version: String? = nil) {
            self.creationDate = creationDate
            self.defaultSubstitutions = defaultSubstitutions
            self.lastModifiedDate = lastModifiedDate
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case creationDate = "CreationDate"
            case defaultSubstitutions = "DefaultSubstitutions"
            case lastModifiedDate = "LastModifiedDate"
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case version = "Version"
        }
    }

    public struct TemplateVersionsResponse: AWSDecodableShape {
        /// An array of responses, one for each version of the message template.
        public let item: [TemplateVersionResponse]
        /// The message that's returned from the API for the request to retrieve information about all the versions of the message template.
        public let message: String?
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?
        /// The unique identifier for the request to retrieve information about all the versions of the message template.
        public let requestID: String?

        public init(item: [TemplateVersionResponse], message: String? = nil, nextToken: String? = nil, requestID: String? = nil) {
            self.item = item
            self.message = message
            self.nextToken = nextToken
            self.requestID = requestID
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case message = "Message"
            case nextToken = "NextToken"
            case requestID = "RequestID"
        }
    }

    public struct TemplatesResponse: AWSDecodableShape {
        /// An array of responses, one for each message template that's associated with your Amazon Pinpoint account and meets any filter criteria that you specified in the request.
        public let item: [TemplateResponse]
        /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages.
        public let nextToken: String?

        public init(item: [TemplateResponse], nextToken: String? = nil) {
            self.item = item
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case item = "Item"
            case nextToken = "NextToken"
        }
    }

    public struct TreatmentResource: AWSDecodableShape {
        /// The delivery configuration settings for sending the treatment through a custom channel. This object is required if the MessageConfiguration object for the treatment specifies a CustomMessage object.
        public let customDeliveryConfiguration: CustomDeliveryConfiguration?
        /// The unique identifier for the treatment.
        public let id: String
        /// The message configuration settings for the treatment.
        public let messageConfiguration: MessageConfiguration?
        /// The schedule settings for the treatment.
        public let schedule: Schedule?
        /// The allocated percentage of users (segment members) that the treatment is sent to.
        public let sizePercent: Int
        /// The current status of the treatment.
        public let state: CampaignState?
        /// The message template to use for the treatment.
        public let templateConfiguration: TemplateConfiguration?
        /// The custom description of the treatment.
        public let treatmentDescription: String?
        /// The custom name of the treatment.
        public let treatmentName: String?

        public init(customDeliveryConfiguration: CustomDeliveryConfiguration? = nil, id: String, messageConfiguration: MessageConfiguration? = nil, schedule: Schedule? = nil, sizePercent: Int, state: CampaignState? = nil, templateConfiguration: TemplateConfiguration? = nil, treatmentDescription: String? = nil, treatmentName: String? = nil) {
            self.customDeliveryConfiguration = customDeliveryConfiguration
            self.id = id
            self.messageConfiguration = messageConfiguration
            self.schedule = schedule
            self.sizePercent = sizePercent
            self.state = state
            self.templateConfiguration = templateConfiguration
            self.treatmentDescription = treatmentDescription
            self.treatmentName = treatmentName
        }

        private enum CodingKeys: String, CodingKey {
            case customDeliveryConfiguration = "CustomDeliveryConfiguration"
            case id = "Id"
            case messageConfiguration = "MessageConfiguration"
            case schedule = "Schedule"
            case sizePercent = "SizePercent"
            case state = "State"
            case templateConfiguration = "TemplateConfiguration"
            case treatmentDescription = "TreatmentDescription"
            case treatmentName = "TreatmentName"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        public let resourceArn: String
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UpdateAdmChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aDMChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "aDMChannelRequest", location: .body(locationName: "ADMChannelRequest")),
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let aDMChannelRequest: ADMChannelRequest
        public let applicationId: String

        public init(aDMChannelRequest: ADMChannelRequest, applicationId: String) {
            self.aDMChannelRequest = aDMChannelRequest
            self.applicationId = applicationId
        }

        private enum CodingKeys: String, CodingKey {
            case aDMChannelRequest = "ADMChannelRequest"
        }
    }

    public struct UpdateAdmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aDMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aDMChannelResponse", location: .body(locationName: "ADMChannelResponse"))
        ]

        public let aDMChannelResponse: ADMChannelResponse

        public init(aDMChannelResponse: ADMChannelResponse) {
            self.aDMChannelResponse = aDMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aDMChannelResponse = "ADMChannelResponse"
        }
    }

    public struct UpdateApnsChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSChannelRequest", location: .body(locationName: "APNSChannelRequest")),
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let aPNSChannelRequest: APNSChannelRequest
        public let applicationId: String

        public init(aPNSChannelRequest: APNSChannelRequest, applicationId: String) {
            self.aPNSChannelRequest = aPNSChannelRequest
            self.applicationId = applicationId
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSChannelRequest = "APNSChannelRequest"
        }
    }

    public struct UpdateApnsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSChannelResponse", location: .body(locationName: "APNSChannelResponse"))
        ]

        public let aPNSChannelResponse: APNSChannelResponse

        public init(aPNSChannelResponse: APNSChannelResponse) {
            self.aPNSChannelResponse = aPNSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSChannelResponse = "APNSChannelResponse"
        }
    }

    public struct UpdateApnsSandboxChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSSandboxChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSSandboxChannelRequest", location: .body(locationName: "APNSSandboxChannelRequest")),
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let aPNSSandboxChannelRequest: APNSSandboxChannelRequest
        public let applicationId: String

        public init(aPNSSandboxChannelRequest: APNSSandboxChannelRequest, applicationId: String) {
            self.aPNSSandboxChannelRequest = aPNSSandboxChannelRequest
            self.applicationId = applicationId
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSSandboxChannelRequest = "APNSSandboxChannelRequest"
        }
    }

    public struct UpdateApnsSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSSandboxChannelResponse", location: .body(locationName: "APNSSandboxChannelResponse"))
        ]

        public let aPNSSandboxChannelResponse: APNSSandboxChannelResponse

        public init(aPNSSandboxChannelResponse: APNSSandboxChannelResponse) {
            self.aPNSSandboxChannelResponse = aPNSSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSSandboxChannelResponse = "APNSSandboxChannelResponse"
        }
    }

    public struct UpdateApnsVoipChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipChannelRequest", location: .body(locationName: "APNSVoipChannelRequest")),
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let aPNSVoipChannelRequest: APNSVoipChannelRequest
        public let applicationId: String

        public init(aPNSVoipChannelRequest: APNSVoipChannelRequest, applicationId: String) {
            self.aPNSVoipChannelRequest = aPNSVoipChannelRequest
            self.applicationId = applicationId
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipChannelRequest = "APNSVoipChannelRequest"
        }
    }

    public struct UpdateApnsVoipChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipChannelResponse", location: .body(locationName: "APNSVoipChannelResponse"))
        ]

        public let aPNSVoipChannelResponse: APNSVoipChannelResponse

        public init(aPNSVoipChannelResponse: APNSVoipChannelResponse) {
            self.aPNSVoipChannelResponse = aPNSVoipChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipChannelResponse = "APNSVoipChannelResponse"
        }
    }

    public struct UpdateApnsVoipSandboxChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipSandboxChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipSandboxChannelRequest", location: .body(locationName: "APNSVoipSandboxChannelRequest")),
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id"))
        ]

        public let aPNSVoipSandboxChannelRequest: APNSVoipSandboxChannelRequest
        public let applicationId: String

        public init(aPNSVoipSandboxChannelRequest: APNSVoipSandboxChannelRequest, applicationId: String) {
            self.aPNSVoipSandboxChannelRequest = aPNSVoipSandboxChannelRequest
            self.applicationId = applicationId
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipSandboxChannelRequest = "APNSVoipSandboxChannelRequest"
        }
    }

    public struct UpdateApnsVoipSandboxChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "aPNSVoipSandboxChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "aPNSVoipSandboxChannelResponse", location: .body(locationName: "APNSVoipSandboxChannelResponse"))
        ]

        public let aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse

        public init(aPNSVoipSandboxChannelResponse: APNSVoipSandboxChannelResponse) {
            self.aPNSVoipSandboxChannelResponse = aPNSVoipSandboxChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case aPNSVoipSandboxChannelResponse = "APNSVoipSandboxChannelResponse"
        }
    }

    public struct UpdateApplicationSettingsRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeApplicationSettingsRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "writeApplicationSettingsRequest", location: .body(locationName: "WriteApplicationSettingsRequest"))
        ]

        public let applicationId: String
        public let writeApplicationSettingsRequest: WriteApplicationSettingsRequest

        public init(applicationId: String, writeApplicationSettingsRequest: WriteApplicationSettingsRequest) {
            self.applicationId = applicationId
            self.writeApplicationSettingsRequest = writeApplicationSettingsRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeApplicationSettingsRequest = "WriteApplicationSettingsRequest"
        }
    }

    public struct UpdateApplicationSettingsResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "applicationSettingsResource"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationSettingsResource", location: .body(locationName: "ApplicationSettingsResource"))
        ]

        public let applicationSettingsResource: ApplicationSettingsResource

        public init(applicationSettingsResource: ApplicationSettingsResource) {
            self.applicationSettingsResource = applicationSettingsResource
        }

        private enum CodingKeys: String, CodingKey {
            case applicationSettingsResource = "ApplicationSettingsResource"
        }
    }

    public struct UpdateAttributesRequest: AWSEncodableShape {
        /// An array of the attributes to remove from all the endpoints that are associated with the application. The array can specify the complete, exact name of each attribute to remove or it can specify a glob pattern that an attribute name must match in order for the attribute to be removed.
        public let blacklist: [String]?

        public init(blacklist: [String]? = nil) {
            self.blacklist = blacklist
        }

        private enum CodingKeys: String, CodingKey {
            case blacklist = "Blacklist"
        }
    }

    public struct UpdateBaiduChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "baiduChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "baiduChannelRequest", location: .body(locationName: "BaiduChannelRequest"))
        ]

        public let applicationId: String
        public let baiduChannelRequest: BaiduChannelRequest

        public init(applicationId: String, baiduChannelRequest: BaiduChannelRequest) {
            self.applicationId = applicationId
            self.baiduChannelRequest = baiduChannelRequest
        }

        private enum CodingKeys: String, CodingKey {
            case baiduChannelRequest = "BaiduChannelRequest"
        }
    }

    public struct UpdateBaiduChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "baiduChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "baiduChannelResponse", location: .body(locationName: "BaiduChannelResponse"))
        ]

        public let baiduChannelResponse: BaiduChannelResponse

        public init(baiduChannelResponse: BaiduChannelResponse) {
            self.baiduChannelResponse = baiduChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case baiduChannelResponse = "BaiduChannelResponse"
        }
    }

    public struct UpdateCampaignRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeCampaignRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "campaignId", location: .uri(locationName: "campaign-id")),
            AWSMemberEncoding(label: "writeCampaignRequest", location: .body(locationName: "WriteCampaignRequest"))
        ]

        public let applicationId: String
        public let campaignId: String
        public let writeCampaignRequest: WriteCampaignRequest

        public init(applicationId: String, campaignId: String, writeCampaignRequest: WriteCampaignRequest) {
            self.applicationId = applicationId
            self.campaignId = campaignId
            self.writeCampaignRequest = writeCampaignRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeCampaignRequest = "WriteCampaignRequest"
        }
    }

    public struct UpdateCampaignResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "campaignResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "campaignResponse", location: .body(locationName: "CampaignResponse"))
        ]

        public let campaignResponse: CampaignResponse

        public init(campaignResponse: CampaignResponse) {
            self.campaignResponse = campaignResponse
        }

        private enum CodingKeys: String, CodingKey {
            case campaignResponse = "CampaignResponse"
        }
    }

    public struct UpdateEmailChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "emailChannelRequest", location: .body(locationName: "EmailChannelRequest"))
        ]

        public let applicationId: String
        public let emailChannelRequest: EmailChannelRequest

        public init(applicationId: String, emailChannelRequest: EmailChannelRequest) {
            self.applicationId = applicationId
            self.emailChannelRequest = emailChannelRequest
        }

        private enum CodingKeys: String, CodingKey {
            case emailChannelRequest = "EmailChannelRequest"
        }
    }

    public struct UpdateEmailChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "emailChannelResponse", location: .body(locationName: "EmailChannelResponse"))
        ]

        public let emailChannelResponse: EmailChannelResponse

        public init(emailChannelResponse: EmailChannelResponse) {
            self.emailChannelResponse = emailChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case emailChannelResponse = "EmailChannelResponse"
        }
    }

    public struct UpdateEmailTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "emailTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "createNewVersion", location: .querystring(locationName: "create-new-version")),
            AWSMemberEncoding(label: "emailTemplateRequest", location: .body(locationName: "EmailTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let createNewVersion: Bool?
        public let emailTemplateRequest: EmailTemplateRequest
        public let templateName: String
        public let version: String?

        public init(createNewVersion: Bool? = nil, emailTemplateRequest: EmailTemplateRequest, templateName: String, version: String? = nil) {
            self.createNewVersion = createNewVersion
            self.emailTemplateRequest = emailTemplateRequest
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case emailTemplateRequest = "EmailTemplateRequest"
        }
    }

    public struct UpdateEmailTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateEndpointRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "endpointId", location: .uri(locationName: "endpoint-id")),
            AWSMemberEncoding(label: "endpointRequest", location: .body(locationName: "EndpointRequest"))
        ]

        public let applicationId: String
        public let endpointId: String
        public let endpointRequest: EndpointRequest

        public init(applicationId: String, endpointId: String, endpointRequest: EndpointRequest) {
            self.applicationId = applicationId
            self.endpointId = endpointId
            self.endpointRequest = endpointRequest
        }

        private enum CodingKeys: String, CodingKey {
            case endpointRequest = "EndpointRequest"
        }
    }

    public struct UpdateEndpointResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateEndpointsBatchRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "endpointBatchRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "endpointBatchRequest", location: .body(locationName: "EndpointBatchRequest"))
        ]

        public let applicationId: String
        public let endpointBatchRequest: EndpointBatchRequest

        public init(applicationId: String, endpointBatchRequest: EndpointBatchRequest) {
            self.applicationId = applicationId
            self.endpointBatchRequest = endpointBatchRequest
        }

        private enum CodingKeys: String, CodingKey {
            case endpointBatchRequest = "EndpointBatchRequest"
        }
    }

    public struct UpdateEndpointsBatchResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateGcmChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "gCMChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "gCMChannelRequest", location: .body(locationName: "GCMChannelRequest"))
        ]

        public let applicationId: String
        public let gCMChannelRequest: GCMChannelRequest

        public init(applicationId: String, gCMChannelRequest: GCMChannelRequest) {
            self.applicationId = applicationId
            self.gCMChannelRequest = gCMChannelRequest
        }

        private enum CodingKeys: String, CodingKey {
            case gCMChannelRequest = "GCMChannelRequest"
        }
    }

    public struct UpdateGcmChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "gCMChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "gCMChannelResponse", location: .body(locationName: "GCMChannelResponse"))
        ]

        public let gCMChannelResponse: GCMChannelResponse

        public init(gCMChannelResponse: GCMChannelResponse) {
            self.gCMChannelResponse = gCMChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case gCMChannelResponse = "GCMChannelResponse"
        }
    }

    public struct UpdateJourneyRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeJourneyRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id")),
            AWSMemberEncoding(label: "writeJourneyRequest", location: .body(locationName: "WriteJourneyRequest"))
        ]

        public let applicationId: String
        public let journeyId: String
        public let writeJourneyRequest: WriteJourneyRequest

        public init(applicationId: String, journeyId: String, writeJourneyRequest: WriteJourneyRequest) {
            self.applicationId = applicationId
            self.journeyId = journeyId
            self.writeJourneyRequest = writeJourneyRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeJourneyRequest = "WriteJourneyRequest"
        }
    }

    public struct UpdateJourneyResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyResponse", location: .body(locationName: "JourneyResponse"))
        ]

        public let journeyResponse: JourneyResponse

        public init(journeyResponse: JourneyResponse) {
            self.journeyResponse = journeyResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyResponse = "JourneyResponse"
        }
    }

    public struct UpdateJourneyStateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyStateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "journeyId", location: .uri(locationName: "journey-id")),
            AWSMemberEncoding(label: "journeyStateRequest", location: .body(locationName: "JourneyStateRequest"))
        ]

        public let applicationId: String
        public let journeyId: String
        public let journeyStateRequest: JourneyStateRequest

        public init(applicationId: String, journeyId: String, journeyStateRequest: JourneyStateRequest) {
            self.applicationId = applicationId
            self.journeyId = journeyId
            self.journeyStateRequest = journeyStateRequest
        }

        private enum CodingKeys: String, CodingKey {
            case journeyStateRequest = "JourneyStateRequest"
        }
    }

    public struct UpdateJourneyStateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "journeyResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "journeyResponse", location: .body(locationName: "JourneyResponse"))
        ]

        public let journeyResponse: JourneyResponse

        public init(journeyResponse: JourneyResponse) {
            self.journeyResponse = journeyResponse
        }

        private enum CodingKeys: String, CodingKey {
            case journeyResponse = "JourneyResponse"
        }
    }

    public struct UpdatePushTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "pushNotificationTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "createNewVersion", location: .querystring(locationName: "create-new-version")),
            AWSMemberEncoding(label: "pushNotificationTemplateRequest", location: .body(locationName: "PushNotificationTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let createNewVersion: Bool?
        public let pushNotificationTemplateRequest: PushNotificationTemplateRequest
        public let templateName: String
        public let version: String?

        public init(createNewVersion: Bool? = nil, pushNotificationTemplateRequest: PushNotificationTemplateRequest, templateName: String, version: String? = nil) {
            self.createNewVersion = createNewVersion
            self.pushNotificationTemplateRequest = pushNotificationTemplateRequest
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case pushNotificationTemplateRequest = "PushNotificationTemplateRequest"
        }
    }

    public struct UpdatePushTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateRecommenderConfiguration: AWSEncodableShape {
        /// A map of key-value pairs that defines 1-10 custom endpoint or user attributes, depending on the value for the RecommendationProviderIdType property. Each of these attributes temporarily stores a recommended item that's retrieved from the recommender model and sent to an AWS Lambda function for additional processing. Each attribute can be used as a message variable in a message template. In the map, the key is the name of a custom attribute and the value is a custom display name for that attribute. The display name appears in the Attribute finder of the template editor on the Amazon Pinpoint console. The following restrictions apply to these names: An attribute name must start with a letter or number and it can contain up to 50 characters. The characters can be letters, numbers, underscores (_), or hyphens (-). Attribute names are case sensitive and must be unique. An attribute display name must start with a letter or number and it can contain up to 25 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-). This object is required if the configuration invokes an AWS Lambda function (RecommendationTransformerUri) to process recommendation data. Otherwise, don't include this object in your request.
        public let attributes: [String: String]?
        /// A custom description of the configuration for the recommender model. The description can contain up to 128 characters. The characters can be letters, numbers, spaces, or the following symbols: _ ; () , ‐.
        public let description: String?
        /// A custom name of the configuration for the recommender model. The name must start with a letter or number and it can contain up to 128 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-).
        public let name: String?
        /// The type of Amazon Pinpoint ID to associate with unique user IDs in the recommender model. This value enables the model to use attribute and event data that’s specific to a particular endpoint or user in an Amazon Pinpoint application. Valid values are: PINPOINT_ENDPOINT_ID - Associate each user in the model with a particular endpoint in Amazon Pinpoint. The data is correlated based on endpoint IDs in Amazon Pinpoint. This is the default value. PINPOINT_USER_ID - Associate each user in the model with a particular user and endpoint in Amazon Pinpoint. The data is correlated based on user IDs in Amazon Pinpoint. If you specify this value, an endpoint definition in Amazon Pinpoint has to specify both a user ID (UserId) and an endpoint ID. Otherwise, messages won’t be sent to the user's endpoint.
        public let recommendationProviderIdType: String?
        /// The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to retrieve recommendation data from the recommender model.
        public let recommendationProviderRoleArn: String
        /// The Amazon Resource Name (ARN) of the recommender model to retrieve recommendation data from. This value must match the ARN of an Amazon Personalize campaign.
        public let recommendationProviderUri: String
        /// A custom display name for the standard endpoint or user attribute (RecommendationItems) that temporarily stores recommended items for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This value is required if the configuration doesn't invoke an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data. This name appears in the Attribute finder of the template editor on the Amazon Pinpoint console. The name can contain up to 25 characters. The characters can be letters, numbers, spaces, underscores (_), or hyphens (-). These restrictions don't apply to attribute values.
        public let recommendationsDisplayName: String?
        /// The number of recommended items to retrieve from the model for each endpoint or user, depending on the value for the RecommendationProviderIdType property. This number determines how many recommended items are available for use in message variables. The minimum value is 1. The maximum value is 5. The default value is 5. To use multiple recommended items and custom attributes with message variables, you have to use an AWS Lambda function (RecommendationTransformerUri) to perform additional processing of recommendation data.
        public let recommendationsPerMessage: Int?
        /// The name or Amazon Resource Name (ARN) of the AWS Lambda function to invoke for additional processing of recommendation data that's retrieved from the recommender model.
        public let recommendationTransformerUri: String?

        public init(attributes: [String: String]? = nil, description: String? = nil, name: String? = nil, recommendationProviderIdType: String? = nil, recommendationProviderRoleArn: String, recommendationProviderUri: String, recommendationsDisplayName: String? = nil, recommendationsPerMessage: Int? = nil, recommendationTransformerUri: String? = nil) {
            self.attributes = attributes
            self.description = description
            self.name = name
            self.recommendationProviderIdType = recommendationProviderIdType
            self.recommendationProviderRoleArn = recommendationProviderRoleArn
            self.recommendationProviderUri = recommendationProviderUri
            self.recommendationsDisplayName = recommendationsDisplayName
            self.recommendationsPerMessage = recommendationsPerMessage
            self.recommendationTransformerUri = recommendationTransformerUri
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
            case description = "Description"
            case name = "Name"
            case recommendationProviderIdType = "RecommendationProviderIdType"
            case recommendationProviderRoleArn = "RecommendationProviderRoleArn"
            case recommendationProviderUri = "RecommendationProviderUri"
            case recommendationsDisplayName = "RecommendationsDisplayName"
            case recommendationsPerMessage = "RecommendationsPerMessage"
            case recommendationTransformerUri = "RecommendationTransformerUri"
        }
    }

    public struct UpdateRecommenderConfigurationRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "updateRecommenderConfiguration"
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderId", location: .uri(locationName: "recommender-id")),
            AWSMemberEncoding(label: "updateRecommenderConfiguration", location: .body(locationName: "UpdateRecommenderConfiguration"))
        ]

        public let recommenderId: String
        public let updateRecommenderConfiguration: UpdateRecommenderConfiguration

        public init(recommenderId: String, updateRecommenderConfiguration: UpdateRecommenderConfiguration) {
            self.recommenderId = recommenderId
            self.updateRecommenderConfiguration = updateRecommenderConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case updateRecommenderConfiguration = "UpdateRecommenderConfiguration"
        }
    }

    public struct UpdateRecommenderConfigurationResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "recommenderConfigurationResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "recommenderConfigurationResponse", location: .body(locationName: "RecommenderConfigurationResponse"))
        ]

        public let recommenderConfigurationResponse: RecommenderConfigurationResponse

        public init(recommenderConfigurationResponse: RecommenderConfigurationResponse) {
            self.recommenderConfigurationResponse = recommenderConfigurationResponse
        }

        private enum CodingKeys: String, CodingKey {
            case recommenderConfigurationResponse = "RecommenderConfigurationResponse"
        }
    }

    public struct UpdateSegmentRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "writeSegmentRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "segmentId", location: .uri(locationName: "segment-id")),
            AWSMemberEncoding(label: "writeSegmentRequest", location: .body(locationName: "WriteSegmentRequest"))
        ]

        public let applicationId: String
        public let segmentId: String
        public let writeSegmentRequest: WriteSegmentRequest

        public init(applicationId: String, segmentId: String, writeSegmentRequest: WriteSegmentRequest) {
            self.applicationId = applicationId
            self.segmentId = segmentId
            self.writeSegmentRequest = writeSegmentRequest
        }

        private enum CodingKeys: String, CodingKey {
            case writeSegmentRequest = "WriteSegmentRequest"
        }
    }

    public struct UpdateSegmentResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "segmentResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "segmentResponse", location: .body(locationName: "SegmentResponse"))
        ]

        public let segmentResponse: SegmentResponse

        public init(segmentResponse: SegmentResponse) {
            self.segmentResponse = segmentResponse
        }

        private enum CodingKeys: String, CodingKey {
            case segmentResponse = "SegmentResponse"
        }
    }

    public struct UpdateSmsChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "sMSChannelRequest", location: .body(locationName: "SMSChannelRequest"))
        ]

        public let applicationId: String
        public let sMSChannelRequest: SMSChannelRequest

        public init(applicationId: String, sMSChannelRequest: SMSChannelRequest) {
            self.applicationId = applicationId
            self.sMSChannelRequest = sMSChannelRequest
        }

        private enum CodingKeys: String, CodingKey {
            case sMSChannelRequest = "SMSChannelRequest"
        }
    }

    public struct UpdateSmsChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "sMSChannelResponse", location: .body(locationName: "SMSChannelResponse"))
        ]

        public let sMSChannelResponse: SMSChannelResponse

        public init(sMSChannelResponse: SMSChannelResponse) {
            self.sMSChannelResponse = sMSChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case sMSChannelResponse = "SMSChannelResponse"
        }
    }

    public struct UpdateSmsTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "sMSTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "createNewVersion", location: .querystring(locationName: "create-new-version")),
            AWSMemberEncoding(label: "sMSTemplateRequest", location: .body(locationName: "SMSTemplateRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version"))
        ]

        public let createNewVersion: Bool?
        public let sMSTemplateRequest: SMSTemplateRequest
        public let templateName: String
        public let version: String?

        public init(createNewVersion: Bool? = nil, sMSTemplateRequest: SMSTemplateRequest, templateName: String, version: String? = nil) {
            self.createNewVersion = createNewVersion
            self.sMSTemplateRequest = sMSTemplateRequest
            self.templateName = templateName
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case sMSTemplateRequest = "SMSTemplateRequest"
        }
    }

    public struct UpdateSmsTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateTemplateActiveVersionRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "templateActiveVersionRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "templateActiveVersionRequest", location: .body(locationName: "TemplateActiveVersionRequest")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "templateType", location: .uri(locationName: "template-type"))
        ]

        public let templateActiveVersionRequest: TemplateActiveVersionRequest
        public let templateName: String
        public let templateType: String

        public init(templateActiveVersionRequest: TemplateActiveVersionRequest, templateName: String, templateType: String) {
            self.templateActiveVersionRequest = templateActiveVersionRequest
            self.templateName = templateName
            self.templateType = templateType
        }

        private enum CodingKeys: String, CodingKey {
            case templateActiveVersionRequest = "TemplateActiveVersionRequest"
        }
    }

    public struct UpdateTemplateActiveVersionResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct UpdateVoiceChannelRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceChannelRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "applicationId", location: .uri(locationName: "application-id")),
            AWSMemberEncoding(label: "voiceChannelRequest", location: .body(locationName: "VoiceChannelRequest"))
        ]

        public let applicationId: String
        public let voiceChannelRequest: VoiceChannelRequest

        public init(applicationId: String, voiceChannelRequest: VoiceChannelRequest) {
            self.applicationId = applicationId
            self.voiceChannelRequest = voiceChannelRequest
        }

        private enum CodingKeys: String, CodingKey {
            case voiceChannelRequest = "VoiceChannelRequest"
        }
    }

    public struct UpdateVoiceChannelResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceChannelResponse"
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceChannelResponse", location: .body(locationName: "VoiceChannelResponse"))
        ]

        public let voiceChannelResponse: VoiceChannelResponse

        public init(voiceChannelResponse: VoiceChannelResponse) {
            self.voiceChannelResponse = voiceChannelResponse
        }

        private enum CodingKeys: String, CodingKey {
            case voiceChannelResponse = "VoiceChannelResponse"
        }
    }

    public struct UpdateVoiceTemplateRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "voiceTemplateRequest"
        public static var _encoding = [
            AWSMemberEncoding(label: "createNewVersion", location: .querystring(locationName: "create-new-version")),
            AWSMemberEncoding(label: "templateName", location: .uri(locationName: "template-name")),
            AWSMemberEncoding(label: "version", location: .querystring(locationName: "version")),
            AWSMemberEncoding(label: "voiceTemplateRequest", location: .body(locationName: "VoiceTemplateRequest"))
        ]

        public let createNewVersion: Bool?
        public let templateName: String
        public let version: String?
        public let voiceTemplateRequest: VoiceTemplateRequest

        public init(createNewVersion: Bool? = nil, templateName: String, version: String? = nil, voiceTemplateRequest: VoiceTemplateRequest) {
            self.createNewVersion = createNewVersion
            self.templateName = templateName
            self.version = version
            self.voiceTemplateRequest = voiceTemplateRequest
        }

        private enum CodingKeys: String, CodingKey {
            case voiceTemplateRequest = "VoiceTemplateRequest"
        }
    }

    public struct UpdateVoiceTemplateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "messageBody"
        public static var _encoding = [
            AWSMemberEncoding(label: "messageBody", location: .body(locationName: "MessageBody"))
        ]

        public let messageBody: MessageBody

        public init(messageBody: MessageBody) {
            self.messageBody = messageBody
        }

        private enum CodingKeys: String, CodingKey {
            case messageBody = "MessageBody"
        }
    }

    public struct VoiceChannelRequest: AWSEncodableShape {
        /// Specifies whether to enable the voice channel for the application.
        public let enabled: Bool?

        public init(enabled: Bool? = nil) {
            self.enabled = enabled
        }

        private enum CodingKeys: String, CodingKey {
            case enabled = "Enabled"
        }
    }

    public struct VoiceChannelResponse: AWSDecodableShape {
        /// The unique identifier for the application that the voice channel applies to.
        public let applicationId: String?
        /// The date and time, in ISO 8601 format, when the voice channel was enabled.
        public let creationDate: String?
        /// Specifies whether the voice channel is enabled for the application.
        public let enabled: Bool?
        /// (Not used) This property is retained only for backward compatibility.
        public let hasCredential: Bool?
        /// (Deprecated) An identifier for the voice channel. This property is retained only for backward compatibility.
        public let id: String?
        /// Specifies whether the voice channel is archived.
        public let isArchived: Bool?
        /// The user who last modified the voice channel.
        public let lastModifiedBy: String?
        /// The date and time, in ISO 8601 format, when the voice channel was last modified.
        public let lastModifiedDate: String?
        /// The type of messaging or notification platform for the channel. For the voice channel, this value is VOICE.
        public let platform: String
        /// The current version of the voice channel.
        public let version: Int?

        public init(applicationId: String? = nil, creationDate: String? = nil, enabled: Bool? = nil, hasCredential: Bool? = nil, id: String? = nil, isArchived: Bool? = nil, lastModifiedBy: String? = nil, lastModifiedDate: String? = nil, platform: String, version: Int? = nil) {
            self.applicationId = applicationId
            self.creationDate = creationDate
            self.enabled = enabled
            self.hasCredential = hasCredential
            self.id = id
            self.isArchived = isArchived
            self.lastModifiedBy = lastModifiedBy
            self.lastModifiedDate = lastModifiedDate
            self.platform = platform
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case creationDate = "CreationDate"
            case enabled = "Enabled"
            case hasCredential = "HasCredential"
            case id = "Id"
            case isArchived = "IsArchived"
            case lastModifiedBy = "LastModifiedBy"
            case lastModifiedDate = "LastModifiedDate"
            case platform = "Platform"
            case version = "Version"
        }
    }

    public struct VoiceMessage: AWSEncodableShape {
        /// The text of the script to use for the voice message.
        public let body: String?
        /// The code for the language to use when synthesizing the text of the message script. For a list of supported languages and the code for each one, see the Amazon Polly Developer Guide.
        public let languageCode: String?
        /// The long code to send the voice message from. This value should be one of the dedicated long codes that's assigned to your AWS account. Although it isn't required, we recommend that you specify the long code in E.164 format, for example +12065550100, to ensure prompt and accurate delivery of the message.
        public let originationNumber: String?
        /// The default message variables to use in the voice message. You can override the default variables with individual address variables.
        public let substitutions: [String: [String]]?
        /// The name of the voice to use when delivering the message. For a list of supported voices, see the Amazon Polly Developer Guide.
        public let voiceId: String?

        public init(body: String? = nil, languageCode: String? = nil, originationNumber: String? = nil, substitutions: [String: [String]]? = nil, voiceId: String? = nil) {
            self.body = body
            self.languageCode = languageCode
            self.originationNumber = originationNumber
            self.substitutions = substitutions
            self.voiceId = voiceId
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case languageCode = "LanguageCode"
            case originationNumber = "OriginationNumber"
            case substitutions = "Substitutions"
            case voiceId = "VoiceId"
        }
    }

    public struct VoiceTemplateRequest: AWSEncodableShape {
        /// The text of the script to use in messages that are based on the message template, in plain text format.
        public let body: String?
        /// A JSON object that specifies the default values to use for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable. When you create a message that's based on the template, you can override these defaults with message-specific and address-specific variables and values.
        public let defaultSubstitutions: String?
        /// The code for the language to use when synthesizing the text of the script in messages that are based on the message template. For a list of supported languages and the code for each one, see the Amazon Polly Developer Guide.
        public let languageCode: String?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// A custom description of the message template.
        public let templateDescription: String?
        /// The name of the voice to use when delivering messages that are based on the message template. For a list of supported voices, see the Amazon Polly Developer Guide.
        public let voiceId: String?

        public init(body: String? = nil, defaultSubstitutions: String? = nil, languageCode: String? = nil, tags: [String: String]? = nil, templateDescription: String? = nil, voiceId: String? = nil) {
            self.body = body
            self.defaultSubstitutions = defaultSubstitutions
            self.languageCode = languageCode
            self.tags = tags
            self.templateDescription = templateDescription
            self.voiceId = voiceId
        }

        private enum CodingKeys: String, CodingKey {
            case body = "Body"
            case defaultSubstitutions = "DefaultSubstitutions"
            case languageCode = "LanguageCode"
            case tags
            case templateDescription = "TemplateDescription"
            case voiceId = "VoiceId"
        }
    }

    public struct VoiceTemplateResponse: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the message template.
        public let arn: String?
        /// The text of the script that's used in messages that are based on the message template, in plain text format.
        public let body: String?
        /// The date, in ISO 8601 format, when the message template was created.
        public let creationDate: String
        /// The JSON object that specifies the default values that are used for message variables in the message template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the default value for that variable.
        public let defaultSubstitutions: String?
        /// The code for the language that's used when synthesizing the text of the script in messages that are based on the message template. For a list of supported languages and the code for each one, see the Amazon Polly Developer Guide.
        public let languageCode: String?
        /// The date, in ISO 8601 format, when the message template was last modified.
        public let lastModifiedDate: String
        /// A string-to-string map of key-value pairs that identifies the tags that are associated with the message template. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The custom description of the message template.
        public let templateDescription: String?
        /// The name of the message template.
        public let templateName: String
        /// The type of channel that the message template is designed for. For a voice template, this value is VOICE.
        public let templateType: TemplateType
        /// The unique identifier, as an integer, for the active version of the message template, or the version of the template that you specified by using the version parameter in your request.
        public let version: String?
        /// The name of the voice that's used when delivering messages that are based on the message template. For a list of supported voices, see the Amazon Polly Developer Guide.
        public let voiceId: String?

        public init(arn: String? = nil, body: String? = nil, creationDate: String, defaultSubstitutions: String? = nil, languageCode: String? = nil, lastModifiedDate: String, tags: [String: String]? = nil, templateDescription: String? = nil, templateName: String, templateType: TemplateType, version: String? = nil, voiceId: String? = nil) {
            self.arn = arn
            self.body = body
            self.creationDate = creationDate
            self.defaultSubstitutions = defaultSubstitutions
            self.languageCode = languageCode
            self.lastModifiedDate = lastModifiedDate
            self.tags = tags
            self.templateDescription = templateDescription
            self.templateName = templateName
            self.templateType = templateType
            self.version = version
            self.voiceId = voiceId
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case body = "Body"
            case creationDate = "CreationDate"
            case defaultSubstitutions = "DefaultSubstitutions"
            case languageCode = "LanguageCode"
            case lastModifiedDate = "LastModifiedDate"
            case tags
            case templateDescription = "TemplateDescription"
            case templateName = "TemplateName"
            case templateType = "TemplateType"
            case version = "Version"
            case voiceId = "VoiceId"
        }
    }

    public struct WaitActivity: AWSEncodableShape & AWSDecodableShape {
        /// The unique identifier for the next activity to perform, after performing the wait activity.
        public let nextActivity: String?
        /// The amount of time to wait or the date and time when the activity moves participants to the next activity in the journey.
        public let waitTime: WaitTime?

        public init(nextActivity: String? = nil, waitTime: WaitTime? = nil) {
            self.nextActivity = nextActivity
            self.waitTime = waitTime
        }

        private enum CodingKeys: String, CodingKey {
            case nextActivity = "NextActivity"
            case waitTime = "WaitTime"
        }
    }

    public struct WaitTime: AWSEncodableShape & AWSDecodableShape {
        /// The amount of time to wait, as a duration in ISO 8601 format, before determining whether the activity's conditions have been met or moving participants to the next activity in the journey.
        public let waitFor: String?
        /// The date and time, in ISO 8601 format, when Amazon Pinpoint determines whether the activity's conditions have been met or the activity moves participants to the next activity in the journey.
        public let waitUntil: String?

        public init(waitFor: String? = nil, waitUntil: String? = nil) {
            self.waitFor = waitFor
            self.waitUntil = waitUntil
        }

        private enum CodingKeys: String, CodingKey {
            case waitFor = "WaitFor"
            case waitUntil = "WaitUntil"
        }
    }

    public struct WriteApplicationSettingsRequest: AWSEncodableShape {
        /// The settings for the AWS Lambda function to invoke by default as a code hook for campaigns in the application. You can use this hook to customize segments that are used by campaigns in the application. To override these settings and define custom settings for a specific campaign, use the CampaignHook object of the Campaign resource.
        public let campaignHook: CampaignHook?
        /// Specifies whether to enable application-related alarms in Amazon CloudWatch.
        public let cloudWatchMetricsEnabled: Bool?
        /// The default sending limits for campaigns in the application. To override these limits and define custom limits for a specific campaign or journey, use the Campaign resource or the Journey resource, respectively.
        public let limits: CampaignLimits?
        /// The default quiet time for campaigns in the application. Quiet time is a specific time range when messages aren't sent to endpoints, if all the following conditions are met: The EndpointDemographic.Timezone property of the endpoint is set to a valid value. The current time in the endpoint's time zone is later than or equal to the time specified by the QuietTime.Start property for the application (or a campaign or journey that has custom quiet time settings). The current time in the endpoint's time zone is earlier than or equal to the time specified by the QuietTime.End property for the application (or a campaign or journey that has custom quiet time settings). If any of the preceding conditions isn't met, the endpoint will receive messages from a campaign or journey, even if quiet time is enabled. To override the default quiet time settings for a specific campaign or journey, use the Campaign resource or the Journey resource to define a custom quiet time for the campaign or journey.
        public let quietTime: QuietTime?

        public init(campaignHook: CampaignHook? = nil, cloudWatchMetricsEnabled: Bool? = nil, limits: CampaignLimits? = nil, quietTime: QuietTime? = nil) {
            self.campaignHook = campaignHook
            self.cloudWatchMetricsEnabled = cloudWatchMetricsEnabled
            self.limits = limits
            self.quietTime = quietTime
        }

        private enum CodingKeys: String, CodingKey {
            case campaignHook = "CampaignHook"
            case cloudWatchMetricsEnabled = "CloudWatchMetricsEnabled"
            case limits = "Limits"
            case quietTime = "QuietTime"
        }
    }

    public struct WriteCampaignRequest: AWSEncodableShape {
        /// An array of requests that defines additional treatments for the campaign, in addition to the default treatment for the campaign.
        public let additionalTreatments: [WriteTreatmentResource]?
        /// The delivery configuration settings for sending the campaign through a custom channel. This object is required if the MessageConfiguration object for the campaign specifies a CustomMessage object.
        public let customDeliveryConfiguration: CustomDeliveryConfiguration?
        /// A custom description of the campaign.
        public let description: String?
        /// The allocated percentage of users (segment members) who shouldn't receive messages from the campaign.
        public let holdoutPercent: Int?
        /// The settings for the AWS Lambda function to invoke as a code hook for the campaign. You can use this hook to customize the segment that's used by the campaign.
        public let hook: CampaignHook?
        /// Specifies whether to pause the campaign. A paused campaign doesn't run unless you resume it by changing this value to false.
        public let isPaused: Bool?
        /// The messaging limits for the campaign.
        public let limits: CampaignLimits?
        /// The message configuration settings for the campaign.
        public let messageConfiguration: MessageConfiguration?
        /// A custom name for the campaign.
        public let name: String?
        /// The schedule settings for the campaign.
        public let schedule: Schedule?
        /// The unique identifier for the segment to associate with the campaign.
        public let segmentId: String?
        /// The version of the segment to associate with the campaign.
        public let segmentVersion: Int?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the campaign. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?
        /// The message template to use for the campaign.
        public let templateConfiguration: TemplateConfiguration?
        /// A custom description of the default treatment for the campaign.
        public let treatmentDescription: String?
        /// A custom name of the default treatment for the campaign, if the campaign has multiple treatments. A treatment is a variation of a campaign that's used for A/B testing.
        public let treatmentName: String?

        public init(additionalTreatments: [WriteTreatmentResource]? = nil, customDeliveryConfiguration: CustomDeliveryConfiguration? = nil, description: String? = nil, holdoutPercent: Int? = nil, hook: CampaignHook? = nil, isPaused: Bool? = nil, limits: CampaignLimits? = nil, messageConfiguration: MessageConfiguration? = nil, name: String? = nil, schedule: Schedule? = nil, segmentId: String? = nil, segmentVersion: Int? = nil, tags: [String: String]? = nil, templateConfiguration: TemplateConfiguration? = nil, treatmentDescription: String? = nil, treatmentName: String? = nil) {
            self.additionalTreatments = additionalTreatments
            self.customDeliveryConfiguration = customDeliveryConfiguration
            self.description = description
            self.holdoutPercent = holdoutPercent
            self.hook = hook
            self.isPaused = isPaused
            self.limits = limits
            self.messageConfiguration = messageConfiguration
            self.name = name
            self.schedule = schedule
            self.segmentId = segmentId
            self.segmentVersion = segmentVersion
            self.tags = tags
            self.templateConfiguration = templateConfiguration
            self.treatmentDescription = treatmentDescription
            self.treatmentName = treatmentName
        }

        private enum CodingKeys: String, CodingKey {
            case additionalTreatments = "AdditionalTreatments"
            case customDeliveryConfiguration = "CustomDeliveryConfiguration"
            case description = "Description"
            case holdoutPercent = "HoldoutPercent"
            case hook = "Hook"
            case isPaused = "IsPaused"
            case limits = "Limits"
            case messageConfiguration = "MessageConfiguration"
            case name = "Name"
            case schedule = "Schedule"
            case segmentId = "SegmentId"
            case segmentVersion = "SegmentVersion"
            case tags
            case templateConfiguration = "TemplateConfiguration"
            case treatmentDescription = "TreatmentDescription"
            case treatmentName = "TreatmentName"
        }
    }

    public struct WriteEventStream: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) of the Amazon Kinesis data stream or Amazon Kinesis Data Firehose delivery stream that you want to publish event data to. For a Kinesis data stream, the ARN format is: arn:aws:kinesis:region:account-id:stream/stream_name
        ///                 For a Kinesis Data Firehose delivery stream, the ARN format is: arn:aws:firehose:region:account-id:deliverystream/stream_name
        public let destinationStreamArn: String
        /// The AWS Identity and Access Management (IAM) role that authorizes Amazon Pinpoint to publish event data to the stream in your AWS account.
        public let roleArn: String

        public init(destinationStreamArn: String, roleArn: String) {
            self.destinationStreamArn = destinationStreamArn
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case destinationStreamArn = "DestinationStreamArn"
            case roleArn = "RoleArn"
        }
    }

    public struct WriteJourneyRequest: AWSEncodableShape {
        /// A map that contains a set of Activity objects, one object for each activity in the journey. For each Activity object, the key is the unique identifier (string) for an activity and the value is the settings for the activity. An activity identifier can contain a maximum of 100 characters. The characters must be alphanumeric characters.
        public let activities: [String: Activity]?
        /// The date, in ISO 8601 format, when the journey was created.
        public let creationDate: String?
        /// The date, in ISO 8601 format, when the journey was last modified.
        public let lastModifiedDate: String?
        /// The messaging and entry limits for the journey.
        public let limits: JourneyLimits?
        /// Specifies whether the journey's scheduled start and end times use each participant's local time. To base the schedule on each participant's local time, set this value to true.
        public let localTime: Bool?
        /// The name of the journey. A journey name can contain a maximum of 150 characters. The characters can be alphanumeric characters or symbols, such as underscores (_) or hyphens (-). A journey name can't contain any spaces.
        public let name: String
        /// The quiet time settings for the journey. Quiet time is a specific time range when a journey doesn't send messages to participants, if all the following conditions are met: The EndpointDemographic.Timezone property of the endpoint for the participant is set to a valid value. The current time in the participant's time zone is later than or equal to the time specified by the QuietTime.Start property for the journey. The current time in the participant's time zone is earlier than or equal to the time specified by the QuietTime.End property for the journey. If any of the preceding conditions isn't met, the participant will receive messages from the journey, even if quiet time is enabled.
        public let quietTime: QuietTime?
        /// The frequency with which Amazon Pinpoint evaluates segment and event data for the journey, as a duration in ISO 8601 format.
        public let refreshFrequency: String?
        /// The schedule settings for the journey.
        public let schedule: JourneySchedule?
        /// The unique identifier for the first activity in the journey. The identifier for this activity can contain a maximum of 128 characters. The characters must be alphanumeric characters.
        public let startActivity: String?
        /// The segment that defines which users are participants in the journey.
        public let startCondition: StartCondition?
        /// The status of the journey. Valid values are: DRAFT - Saves the journey and doesn't publish it. ACTIVE - Saves and publishes the journey. Depending on the journey's schedule, the journey starts running immediately or at the scheduled start time. If a journey's status is ACTIVE, you can't add, change, or remove activities from it. The CANCELLED, COMPLETED, and CLOSED values are not supported in requests to create or update a journey. To cancel a journey, use the Journey State resource.
        public let state: State?

        public init(activities: [String: Activity]? = nil, creationDate: String? = nil, lastModifiedDate: String? = nil, limits: JourneyLimits? = nil, localTime: Bool? = nil, name: String, quietTime: QuietTime? = nil, refreshFrequency: String? = nil, schedule: JourneySchedule? = nil, startActivity: String? = nil, startCondition: StartCondition? = nil, state: State? = nil) {
            self.activities = activities
            self.creationDate = creationDate
            self.lastModifiedDate = lastModifiedDate
            self.limits = limits
            self.localTime = localTime
            self.name = name
            self.quietTime = quietTime
            self.refreshFrequency = refreshFrequency
            self.schedule = schedule
            self.startActivity = startActivity
            self.startCondition = startCondition
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case activities = "Activities"
            case creationDate = "CreationDate"
            case lastModifiedDate = "LastModifiedDate"
            case limits = "Limits"
            case localTime = "LocalTime"
            case name = "Name"
            case quietTime = "QuietTime"
            case refreshFrequency = "RefreshFrequency"
            case schedule = "Schedule"
            case startActivity = "StartActivity"
            case startCondition = "StartCondition"
            case state = "State"
        }
    }

    public struct WriteSegmentRequest: AWSEncodableShape {
        /// The criteria that define the dimensions for the segment.
        public let dimensions: SegmentDimensions?
        /// The name of the segment.
        public let name: String?
        /// The segment group to use and the dimensions to apply to the group's base segments in order to build the segment. A segment group can consist of zero or more base segments. Your request can include only one segment group.
        public let segmentGroups: SegmentGroupList?
        /// A string-to-string map of key-value pairs that defines the tags to associate with the segment. Each tag consists of a required tag key and an associated tag value.
        public let tags: [String: String]?

        public init(dimensions: SegmentDimensions? = nil, name: String? = nil, segmentGroups: SegmentGroupList? = nil, tags: [String: String]? = nil) {
            self.dimensions = dimensions
            self.name = name
            self.segmentGroups = segmentGroups
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dimensions = "Dimensions"
            case name = "Name"
            case segmentGroups = "SegmentGroups"
            case tags
        }
    }

    public struct WriteTreatmentResource: AWSEncodableShape {
        /// The delivery configuration settings for sending the treatment through a custom channel. This object is required if the MessageConfiguration object for the treatment specifies a CustomMessage object.
        public let customDeliveryConfiguration: CustomDeliveryConfiguration?
        /// The message configuration settings for the treatment.
        public let messageConfiguration: MessageConfiguration?
        /// The schedule settings for the treatment.
        public let schedule: Schedule?
        /// The allocated percentage of users (segment members) to send the treatment to.
        public let sizePercent: Int
        /// The message template to use for the treatment.
        public let templateConfiguration: TemplateConfiguration?
        /// A custom description of the treatment.
        public let treatmentDescription: String?
        /// A custom name for the treatment.
        public let treatmentName: String?

        public init(customDeliveryConfiguration: CustomDeliveryConfiguration? = nil, messageConfiguration: MessageConfiguration? = nil, schedule: Schedule? = nil, sizePercent: Int, templateConfiguration: TemplateConfiguration? = nil, treatmentDescription: String? = nil, treatmentName: String? = nil) {
            self.customDeliveryConfiguration = customDeliveryConfiguration
            self.messageConfiguration = messageConfiguration
            self.schedule = schedule
            self.sizePercent = sizePercent
            self.templateConfiguration = templateConfiguration
            self.treatmentDescription = treatmentDescription
            self.treatmentName = treatmentName
        }

        private enum CodingKeys: String, CodingKey {
            case customDeliveryConfiguration = "CustomDeliveryConfiguration"
            case messageConfiguration = "MessageConfiguration"
            case schedule = "Schedule"
            case sizePercent = "SizePercent"
            case templateConfiguration = "TemplateConfiguration"
            case treatmentDescription = "TreatmentDescription"
            case treatmentName = "TreatmentName"
        }
    }
}
